<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/fs/ext4/xattr.c, branch v3.17-rc2</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>ext4: add missing BUFFER_TRACE before ext4_journal_get_write_access</title>
<updated>2014-05-13T02:06:43+00:00</updated>
<author>
<name>liang xie</name>
<email>xieliang007@gmail.com</email>
</author>
<published>2014-05-13T02:06:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=5d60125530b0122f5a0a57481f3064a6250365dd'/>
<id>5d60125530b0122f5a0a57481f3064a6250365dd</id>
<content type='text'>
Make them more consistently

Signed-off-by: xieliang &lt;xieliang@xiaomi.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Make them more consistently

Signed-off-by: xieliang &lt;xieliang@xiaomi.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: remove unnecessary double parentheses</title>
<updated>2014-05-12T16:55:07+00:00</updated>
<author>
<name>Lukas Czerner</name>
<email>lczerner@redhat.com</email>
</author>
<published>2014-05-12T16:55:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=c8b459f492cbe8be26d8eac0489ef627ed355947'/>
<id>c8b459f492cbe8be26d8eac0489ef627ed355947</id>
<content type='text'>
Signed-off-by: Lukas Czerner &lt;lczerner@redhat.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Lukas Czerner &lt;lczerner@redhat.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: avoid unneeded lookup when xattr name is invalid</title>
<updated>2014-05-12T13:57:59+00:00</updated>
<author>
<name>Zhang Zhen</name>
<email>zhenzhang.zhang@huawei.com</email>
</author>
<published>2014-05-12T13:57:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=230b8c1a7b388ac5e06549a7dbe083568875804e'/>
<id>230b8c1a7b388ac5e06549a7dbe083568875804e</id>
<content type='text'>
In ext4_xattr_set_handle() we have checked the xattr name's length. So
we should also check it in ext4_xattr_get() to avoid unneeded lookup
caused by invalid name.

Signed-off-by: Zhang Zhen &lt;zhenzhang.zhang@huawei.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In ext4_xattr_set_handle() we have checked the xattr name's length. So
we should also check it in ext4_xattr_get() to avoid unneeded lookup
caused by invalid name.

Signed-off-by: Zhang Zhen &lt;zhenzhang.zhang@huawei.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: fix jbd2 warning under heavy xattr load</title>
<updated>2014-04-07T14:54:21+00:00</updated>
<author>
<name>Jan Kara</name>
<email>jack@suse.cz</email>
</author>
<published>2014-04-07T14:54:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=ec4cb1aa2b7bae18dd8164f2e9c7c51abcf61280'/>
<id>ec4cb1aa2b7bae18dd8164f2e9c7c51abcf61280</id>
<content type='text'>
When heavily exercising xattr code the assertion that
jbd2_journal_dirty_metadata() shouldn't return error was triggered:

WARNING: at /srv/autobuild-ceph/gitbuilder.git/build/fs/jbd2/transaction.c:1237
jbd2_journal_dirty_metadata+0x1ba/0x260()

CPU: 0 PID: 8877 Comm: ceph-osd Tainted: G    W 3.10.0-ceph-00049-g68d04c9 #1
Hardware name: Dell Inc. PowerEdge R410/01V648, BIOS 1.6.3 02/07/2011
 ffffffff81a1d3c8 ffff880214469928 ffffffff816311b0 ffff880214469968
 ffffffff8103fae0 ffff880214469958 ffff880170a9dc30 ffff8802240fbe80
 0000000000000000 ffff88020b366000 ffff8802256e7510 ffff880214469978
Call Trace:
 [&lt;ffffffff816311b0&gt;] dump_stack+0x19/0x1b
 [&lt;ffffffff8103fae0&gt;] warn_slowpath_common+0x70/0xa0
 [&lt;ffffffff8103fb2a&gt;] warn_slowpath_null+0x1a/0x20
 [&lt;ffffffff81267c2a&gt;] jbd2_journal_dirty_metadata+0x1ba/0x260
 [&lt;ffffffff81245093&gt;] __ext4_handle_dirty_metadata+0xa3/0x140
 [&lt;ffffffff812561f3&gt;] ext4_xattr_release_block+0x103/0x1f0
 [&lt;ffffffff81256680&gt;] ext4_xattr_block_set+0x1e0/0x910
 [&lt;ffffffff8125795b&gt;] ext4_xattr_set_handle+0x38b/0x4a0
 [&lt;ffffffff810a319d&gt;] ? trace_hardirqs_on+0xd/0x10
 [&lt;ffffffff81257b32&gt;] ext4_xattr_set+0xc2/0x140
 [&lt;ffffffff81258547&gt;] ext4_xattr_user_set+0x47/0x50
 [&lt;ffffffff811935ce&gt;] generic_setxattr+0x6e/0x90
 [&lt;ffffffff81193ecb&gt;] __vfs_setxattr_noperm+0x7b/0x1c0
 [&lt;ffffffff811940d4&gt;] vfs_setxattr+0xc4/0xd0
 [&lt;ffffffff8119421e&gt;] setxattr+0x13e/0x1e0
 [&lt;ffffffff811719c7&gt;] ? __sb_start_write+0xe7/0x1b0
 [&lt;ffffffff8118f2e8&gt;] ? mnt_want_write_file+0x28/0x60
 [&lt;ffffffff8118c65c&gt;] ? fget_light+0x3c/0x130
 [&lt;ffffffff8118f2e8&gt;] ? mnt_want_write_file+0x28/0x60
 [&lt;ffffffff8118f1f8&gt;] ? __mnt_want_write+0x58/0x70
 [&lt;ffffffff811946be&gt;] SyS_fsetxattr+0xbe/0x100
 [&lt;ffffffff816407c2&gt;] system_call_fastpath+0x16/0x1b

The reason for the warning is that buffer_head passed into
jbd2_journal_dirty_metadata() didn't have journal_head attached. This is
caused by the following race of two ext4_xattr_release_block() calls:

CPU1                                CPU2
ext4_xattr_release_block()          ext4_xattr_release_block()
lock_buffer(bh);
/* False */
if (BHDR(bh)-&gt;h_refcount == cpu_to_le32(1))
} else {
  le32_add_cpu(&amp;BHDR(bh)-&gt;h_refcount, -1);
  unlock_buffer(bh);
                                    lock_buffer(bh);
                                    /* True */
                                    if (BHDR(bh)-&gt;h_refcount == cpu_to_le32(1))
                                      get_bh(bh);
                                      ext4_free_blocks()
                                        ...
                                        jbd2_journal_forget()
                                          jbd2_journal_unfile_buffer()
                                          -&gt; JH is gone
  error = ext4_handle_dirty_xattr_block(handle, inode, bh);
  -&gt; triggers the warning

We fix the problem by moving ext4_handle_dirty_xattr_block() under the
buffer lock. Sadly this cannot be done in nojournal mode as that
function can call sync_dirty_buffer() which would deadlock. Luckily in
nojournal mode the race is harmless (we only dirty already freed buffer)
and thus for nojournal mode we leave the dirtying outside of the buffer
lock.

Reported-by: Sage Weil &lt;sage@inktank.com&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Cc: stable@vger.kernel.org
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When heavily exercising xattr code the assertion that
jbd2_journal_dirty_metadata() shouldn't return error was triggered:

WARNING: at /srv/autobuild-ceph/gitbuilder.git/build/fs/jbd2/transaction.c:1237
jbd2_journal_dirty_metadata+0x1ba/0x260()

CPU: 0 PID: 8877 Comm: ceph-osd Tainted: G    W 3.10.0-ceph-00049-g68d04c9 #1
Hardware name: Dell Inc. PowerEdge R410/01V648, BIOS 1.6.3 02/07/2011
 ffffffff81a1d3c8 ffff880214469928 ffffffff816311b0 ffff880214469968
 ffffffff8103fae0 ffff880214469958 ffff880170a9dc30 ffff8802240fbe80
 0000000000000000 ffff88020b366000 ffff8802256e7510 ffff880214469978
Call Trace:
 [&lt;ffffffff816311b0&gt;] dump_stack+0x19/0x1b
 [&lt;ffffffff8103fae0&gt;] warn_slowpath_common+0x70/0xa0
 [&lt;ffffffff8103fb2a&gt;] warn_slowpath_null+0x1a/0x20
 [&lt;ffffffff81267c2a&gt;] jbd2_journal_dirty_metadata+0x1ba/0x260
 [&lt;ffffffff81245093&gt;] __ext4_handle_dirty_metadata+0xa3/0x140
 [&lt;ffffffff812561f3&gt;] ext4_xattr_release_block+0x103/0x1f0
 [&lt;ffffffff81256680&gt;] ext4_xattr_block_set+0x1e0/0x910
 [&lt;ffffffff8125795b&gt;] ext4_xattr_set_handle+0x38b/0x4a0
 [&lt;ffffffff810a319d&gt;] ? trace_hardirqs_on+0xd/0x10
 [&lt;ffffffff81257b32&gt;] ext4_xattr_set+0xc2/0x140
 [&lt;ffffffff81258547&gt;] ext4_xattr_user_set+0x47/0x50
 [&lt;ffffffff811935ce&gt;] generic_setxattr+0x6e/0x90
 [&lt;ffffffff81193ecb&gt;] __vfs_setxattr_noperm+0x7b/0x1c0
 [&lt;ffffffff811940d4&gt;] vfs_setxattr+0xc4/0xd0
 [&lt;ffffffff8119421e&gt;] setxattr+0x13e/0x1e0
 [&lt;ffffffff811719c7&gt;] ? __sb_start_write+0xe7/0x1b0
 [&lt;ffffffff8118f2e8&gt;] ? mnt_want_write_file+0x28/0x60
 [&lt;ffffffff8118c65c&gt;] ? fget_light+0x3c/0x130
 [&lt;ffffffff8118f2e8&gt;] ? mnt_want_write_file+0x28/0x60
 [&lt;ffffffff8118f1f8&gt;] ? __mnt_want_write+0x58/0x70
 [&lt;ffffffff811946be&gt;] SyS_fsetxattr+0xbe/0x100
 [&lt;ffffffff816407c2&gt;] system_call_fastpath+0x16/0x1b

The reason for the warning is that buffer_head passed into
jbd2_journal_dirty_metadata() didn't have journal_head attached. This is
caused by the following race of two ext4_xattr_release_block() calls:

CPU1                                CPU2
ext4_xattr_release_block()          ext4_xattr_release_block()
lock_buffer(bh);
/* False */
if (BHDR(bh)-&gt;h_refcount == cpu_to_le32(1))
} else {
  le32_add_cpu(&amp;BHDR(bh)-&gt;h_refcount, -1);
  unlock_buffer(bh);
                                    lock_buffer(bh);
                                    /* True */
                                    if (BHDR(bh)-&gt;h_refcount == cpu_to_le32(1))
                                      get_bh(bh);
                                      ext4_free_blocks()
                                        ...
                                        jbd2_journal_forget()
                                          jbd2_journal_unfile_buffer()
                                          -&gt; JH is gone
  error = ext4_handle_dirty_xattr_block(handle, inode, bh);
  -&gt; triggers the warning

We fix the problem by moving ext4_handle_dirty_xattr_block() under the
buffer lock. Sadly this cannot be done in nojournal mode as that
function can call sync_dirty_buffer() which would deadlock. Luckily in
nojournal mode the race is harmless (we only dirty already freed buffer)
and thus for nojournal mode we leave the dirtying outside of the buffer
lock.

Reported-by: Sage Weil &lt;sage@inktank.com&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Cc: stable@vger.kernel.org
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: each filesystem creates and uses its own mb_cache</title>
<updated>2014-03-18T23:24:49+00:00</updated>
<author>
<name>T Makphaibulchoke</name>
<email>tmac@hp.com</email>
</author>
<published>2014-03-18T23:24:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9c191f701ce9f9bc604e88a5dc69cd943daa5d3b'/>
<id>9c191f701ce9f9bc604e88a5dc69cd943daa5d3b</id>
<content type='text'>
This patch adds new interfaces to create and destory cache,
ext4_xattr_create_cache() and ext4_xattr_destroy_cache(), and remove
the cache creation and destory calls from ex4_init_xattr() and
ext4_exitxattr() in fs/ext4/xattr.c.

fs/ext4/super.c has been changed so that when a filesystem is mounted
a cache is allocated and attched to its ext4_sb_info structure.

fs/mbcache.c has been changed so that only one slab allocator is
allocated and used by all mbcache structures.

Signed-off-by: T. Makphaibulchoke &lt;tmac@hp.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch adds new interfaces to create and destory cache,
ext4_xattr_create_cache() and ext4_xattr_destroy_cache(), and remove
the cache creation and destory calls from ex4_init_xattr() and
ext4_exitxattr() in fs/ext4/xattr.c.

fs/ext4/super.c has been changed so that when a filesystem is mounted
a cache is allocated and attched to its ext4_sb_info structure.

fs/mbcache.c has been changed so that only one slab allocator is
allocated and used by all mbcache structures.

Signed-off-by: T. Makphaibulchoke &lt;tmac@hp.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: don't calculate total xattr header size unless needed</title>
<updated>2014-02-20T01:15:21+00:00</updated>
<author>
<name>Theodore Ts'o</name>
<email>tytso@mit.edu</email>
</author>
<published>2014-02-20T01:15:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=7b1b2c1b9c397dcb86293ae79aa7fb7c5446120f'/>
<id>7b1b2c1b9c397dcb86293ae79aa7fb7c5446120f</id>
<content type='text'>
The function ext4_expand_extra_isize_ea() doesn't need the size of all
of the extended attribute headers.  So if we don't calculate it when
it is unneeded, it we can skip some undeeded memory references, and as
a bonus, we eliminate some kvetching by static code analysis tools.

Addresses-Coverity-Id: #741291

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The function ext4_expand_extra_isize_ea() doesn't need the size of all
of the extended attribute headers.  So if we don't calculate it when
it is unneeded, it we can skip some undeeded memory references, and as
a bonus, we eliminate some kvetching by static code analysis tools.

Addresses-Coverity-Id: #741291

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ext2/3/4: use generic posix ACL infrastructure</title>
<updated>2014-01-26T04:58:19+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@infradead.org</email>
</author>
<published>2013-12-20T13:16:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=64e178a7118b1cf7648391755e44dcc209091003'/>
<id>64e178a7118b1cf7648391755e44dcc209091003</id>
<content type='text'>
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Reviewed-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Reviewed-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: avoid bh leak in retry path of ext4_expand_extra_isize_ea()</title>
<updated>2013-11-01T03:00:24+00:00</updated>
<author>
<name>Theodore Ts'o</name>
<email>tytso@mit.edu</email>
</author>
<published>2013-11-01T03:00:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=dcb9917ba041866686fe152850364826c4622a36'/>
<id>dcb9917ba041866686fe152850364826c4622a36</id>
<content type='text'>
Reported-by: Dave Jones &lt;davej@redhat.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Cc: stable@vger.kernel.org
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Reported-by: Dave Jones &lt;davej@redhat.com&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Cc: stable@vger.kernel.org
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: fix memory leak in xattr</title>
<updated>2013-10-12T18:39:49+00:00</updated>
<author>
<name>Dave Jones</name>
<email>davej@redhat.com</email>
</author>
<published>2013-10-11T00:05:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=6e4ea8e33b2057b85d75175dd89b93f5e26de3bc'/>
<id>6e4ea8e33b2057b85d75175dd89b93f5e26de3bc</id>
<content type='text'>
If we take the 2nd retry path in ext4_expand_extra_isize_ea, we
potentionally return from the function without having freed these
allocations.  If we don't do the return, we over-write the previous
allocation pointers, so we leak either way.

Spotted with Coverity.

[ Fixed by tytso to set is and bs to NULL after freeing these
  pointers, in case in the retry loop we later end up triggering an
  error causing a jump to cleanup, at which point we could have a double
  free bug. -- Ted ]

Signed-off-by: Dave Jones &lt;davej@fedoraproject.org&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Reviewed-by: Eric Sandeen &lt;sandeen@redhat.com&gt;
Cc: stable@vger.kernel.org
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If we take the 2nd retry path in ext4_expand_extra_isize_ea, we
potentionally return from the function without having freed these
allocations.  If we don't do the return, we over-write the previous
allocation pointers, so we leak either way.

Spotted with Coverity.

[ Fixed by tytso to set is and bs to NULL after freeing these
  pointers, in case in the retry loop we later end up triggering an
  error causing a jump to cleanup, at which point we could have a double
  free bug. -- Ted ]

Signed-off-by: Dave Jones &lt;davej@fedoraproject.org&gt;
Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
Reviewed-by: Eric Sandeen &lt;sandeen@redhat.com&gt;
Cc: stable@vger.kernel.org
</pre>
</div>
</content>
</entry>
<entry>
<title>ext4: fix miscellaneous big endian warnings</title>
<updated>2013-04-10T03:59:55+00:00</updated>
<author>
<name>Theodore Ts'o</name>
<email>tytso@mit.edu</email>
</author>
<published>2013-04-10T03:59:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d6a771056b32146da1280f7872f6936b0c7770ea'/>
<id>d6a771056b32146da1280f7872f6936b0c7770ea</id>
<content type='text'>
None of these result in any bug, but they makes sparse complain.

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
None of these result in any bug, but they makes sparse complain.

Signed-off-by: "Theodore Ts'o" &lt;tytso@mit.edu&gt;
</pre>
</div>
</content>
</entry>
</feed>
