]> git.baikalelectronics.ru Git - kernel.git/commit
ext3: Fix oops in ext3_try_to_allocate_with_rsv()
authorJan Kara <jack@suse.cz>
Mon, 30 May 2011 11:29:20 +0000 (13:29 +0200)
committerJan Kara <jack@suse.cz>
Sat, 25 Jun 2011 15:29:52 +0000 (17:29 +0200)
commita00b10214d8374fcaa8587948f88ff5a0db2257e
tree6a882f483b73f1c1590a61268261397345dd8e96
parentb03c6a6d7536f165c8e598a706d37052fdd32685
ext3: Fix oops in ext3_try_to_allocate_with_rsv()

Block allocation is called from two places: ext3_get_blocks_handle() and
ext3_xattr_block_set(). These two callers are not necessarily synchronized
because xattr code holds only xattr_sem and i_mutex, and
ext3_get_blocks_handle() may hold only truncate_mutex when called from
writepage() path. Block reservation code does not expect two concurrent
allocations to happen to the same inode and thus assertions can be triggered
or reservation structure corruption can occur.

Fix the problem by taking truncate_mutex in xattr code to serialize
allocations.

CC: Sage Weil <sage@newdream.net>
CC: stable@kernel.org
Reported-by: Fyodor Ustinov <ufm@ufm.su>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/ext3/xattr.c