vfs: fix possible deadlock in ext2, ext3, ext4 when using xattrs
mb_cache_entry_alloc() was allocating cache entries with GFP_KERNEL. But filesystems are calling this function while holding xattr_sem so possible recursion into the fs violates locking ordering of xattr_sem and transaction start / i_mutex for ext2-4. Change mb_cache_entry_alloc() so that filesystems can specify desired gfp mask and use GFP_NOFS from all of them. Signed-off-by: Jan Kara <jack@suse.cz> Reported-by: Dave Jones <davej@redhat.com> Cc: <linux-ext4@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
@ -1386,7 +1386,7 @@ ext4_xattr_cache_insert(struct buffer_head *bh)
|
||||
struct mb_cache_entry *ce;
|
||||
int error;
|
||||
|
||||
ce = mb_cache_entry_alloc(ext4_xattr_cache);
|
||||
ce = mb_cache_entry_alloc(ext4_xattr_cache, GFP_NOFS);
|
||||
if (!ce) {
|
||||
ea_bdebug(bh, "out of memory");
|
||||
return;
|
||||
|
Reference in New Issue
Block a user