]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerWilly Tarreau <w@1wt.eu>
Sat, 11 Feb 2012 14:37:36 +0000 (15:37 +0100)
commit72360fe7fde0901fd425293824c9822cb4d78df6
treeba93f01013cbcb4093c9ed663c89259b6f19c4f9
parent1117403dddee442ba7dbe5920019f36d0ce26645
ext3: Fix oops in ext3_try_to_allocate_with_rsv()

commit ad95c5e9bc8b5885f94dce720137cac8fa8da4c9 upstream.

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>
Reported-by: Fyodor Ustinov <ufm@ufm.su>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Signed-off-by: Willy Tarreau <w@1wt.eu>
fs/ext3/xattr.c