<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lwn.git/fs/udf/inode.c, branch v3.17.5</title>
<subtitle>Linux kernel documentation tree maintained by Jonathan Corbet</subtitle>
<id>http://mirrors.hust.edu.cn/git/lwn.git/atom?h=v3.17.5</id>
<link rel='self' href='http://mirrors.hust.edu.cn/git/lwn.git/atom?h=v3.17.5'/>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/'/>
<updated>2014-10-30T16:43:13+00:00</updated>
<entry>
<title>udf: Fix loading of special inodes</title>
<updated>2014-10-30T16:43:13+00:00</updated>
<author>
<name>Jan Kara</name>
<email>jack@suse.cz</email>
</author>
<published>2014-10-09T10:52:16+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=801c7a20d255e300ab51a6fcb1d0e218d136b16f'/>
<id>urn:sha1:801c7a20d255e300ab51a6fcb1d0e218d136b16f</id>
<content type='text'>
commit 6174c2eb8ecef271159bdcde460ce8af54d8f72f upstream.

Some UDF media have special inodes (like VAT or metadata partition
inodes) whose link_count is 0. Thus commit 4071b9136223 (udf: Properly
detect stale inodes) broke loading these inodes because udf_iget()
started returning -ESTALE for them. Since we still need to properly
detect stale inodes queried by NFS, create two variants of udf_iget() -
one which is used for looking up special inodes (which ignores
link_count == 0) and one which is used for other cases which return
ESTALE when link_count == 0.

Fixes: 4071b913622316970d0e1919f7d82b4403fec5f2
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
</entry>
<entry>
<title>udf: Set i_generation field</title>
<updated>2014-09-04T19:37:40+00:00</updated>
<author>
<name>Jan Kara</name>
<email>jack@suse.cz</email>
</author>
<published>2014-09-04T14:26:19+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=470cca56c366428d4d5785a0a5a291619c332c7f'/>
<id>urn:sha1:470cca56c366428d4d5785a0a5a291619c332c7f</id>
<content type='text'>
Currently UDF doesn't initialize i_generation in any way and thus NFS
can easily get reallocated inodes from stale file handles. Luckily UDF
already has a unique object identifier associated with each inode -
i_unique. Use that for initialization of i_generation.

Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</content>
</entry>
<entry>
<title>udf: Properly detect stale inodes</title>
<updated>2014-09-04T19:37:39+00:00</updated>
<author>
<name>Jan Kara</name>
<email>jack@suse.cz</email>
</author>
<published>2014-09-04T14:19:47+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=4071b913622316970d0e1919f7d82b4403fec5f2'/>
<id>urn:sha1:4071b913622316970d0e1919f7d82b4403fec5f2</id>
<content type='text'>
NFS can easily ask for inodes that are already deleted. Currently UDF
happily returns such inodes which is a bug. Return -ESTALE if
udf_read_inode() is asked to read deleted inode.

Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</content>
</entry>
<entry>
<title>udf: Make udf_read_inode() and udf_iget() return error</title>
<updated>2014-09-04T19:36:35+00:00</updated>
<author>
<name>Jan Kara</name>
<email>jack@suse.cz</email>
</author>
<published>2014-09-04T14:15:51+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=6d3d5e860a114ae606b1af2ba7f64cb19fbeb414'/>
<id>urn:sha1:6d3d5e860a114ae606b1af2ba7f64cb19fbeb414</id>
<content type='text'>
Currently __udf_read_inode() wasn't returning anything and we found out
whether we succeeded reading inode by checking whether inode is bad or
not. udf_iget() returned NULL on failure and inode pointer otherwise.
Make these two functions properly propagate errors up the call stack and
use the return value in callers.

Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</content>
</entry>
<entry>
<title>udf: Avoid infinite loop when processing indirect ICBs</title>
<updated>2014-09-04T12:12:29+00:00</updated>
<author>
<name>Jan Kara</name>
<email>jack@suse.cz</email>
</author>
<published>2014-09-04T12:06:55+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=c03aa9f6e1f938618e6db2e23afef0574efeeb65'/>
<id>urn:sha1:c03aa9f6e1f938618e6db2e23afef0574efeeb65</id>
<content type='text'>
We did not implement any bound on number of indirect ICBs we follow when
loading inode. Thus corrupted medium could cause kernel to go into an
infinite loop, possibly causing a stack overflow.

Fix the possible stack overflow by removing recursion from
__udf_read_inode() and limit number of indirect ICBs we follow to avoid
infinite loops.

Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</content>
</entry>
<entry>
<title>udf: Fold udf_fill_inode() into __udf_read_inode()</title>
<updated>2014-09-04T11:32:50+00:00</updated>
<author>
<name>Jan Kara</name>
<email>jack@suse.cz</email>
</author>
<published>2014-09-04T11:32:50+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=bb7720a0b4a8ca3269fd86fbb45a78d2e0d3deaf'/>
<id>urn:sha1:bb7720a0b4a8ca3269fd86fbb45a78d2e0d3deaf</id>
<content type='text'>
There's no good reason to separate these since udf_fill_inode() is
called only from __udf_read_inode() and both do part of the same thing.

Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</content>
</entry>
<entry>
<title>udf: Avoid dir link count to go negative</title>
<updated>2014-09-04T09:47:51+00:00</updated>
<author>
<name>Jan Kara</name>
<email>jack@suse.cz</email>
</author>
<published>2014-09-04T09:47:51+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=8a70ee3307908c46f952df91be72a18d5f5ad0a3'/>
<id>urn:sha1:8a70ee3307908c46f952df91be72a18d5f5ad0a3</id>
<content type='text'>
If we are writing back inode of unlinked directory, its link count ends
up being (u16)-1. Although the inode is deleted, udf_iget() can load the
inode when NFS uses stale file handle and get confused.

Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
</content>
</entry>
<entry>
<title>switch {__,}blockdev_direct_IO() to iov_iter</title>
<updated>2014-05-06T21:32:46+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2014-03-05T06:33:16+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=31b140398ce56ab41646eda7f02bcb78d6a4c916'/>
<id>urn:sha1:31b140398ce56ab41646eda7f02bcb78d6a4c916</id>
<content type='text'>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>get rid of pointless iov_length() in -&gt;direct_IO()</title>
<updated>2014-05-06T21:32:45+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2014-03-05T03:38:00+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=a6cbcd4a4a85e2fdb0b3344b88df2e8b3d526b9e'/>
<id>urn:sha1:a6cbcd4a4a85e2fdb0b3344b88df2e8b3d526b9e</id>
<content type='text'>
all callers have iov_length(iter-&gt;iov, iter-&gt;nr_segs) == iov_iter_count(iter)

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>pass iov_iter to -&gt;direct_IO()</title>
<updated>2014-05-06T21:32:44+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2014-03-05T02:27:34+00:00</published>
<link rel='alternate' type='text/html' href='http://mirrors.hust.edu.cn/git/lwn.git/commit/?id=d8d3d94b80aa1a1c0ca75c58b8abdc7356f38418'/>
<id>urn:sha1:d8d3d94b80aa1a1c0ca75c58b8abdc7356f38418</id>
<content type='text'>
unmodified, for now

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
</feed>
