summaryrefslogtreecommitdiffstats
path: root/include/linux/mbcache.h
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2008-04-15 14:34:43 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-15 19:35:41 -0700
commit335e92e8a515420bd47a6b0f01cb9a206c0ed6e4 (patch)
tree1518f9afa7ac7047be2c86481b3dbc12f8cc9282 /include/linux/mbcache.h
parent423bec43079a2942a3004034df7aad76469758d8 (diff)
downloadlinux-335e92e8a515420bd47a6b0f01cb9a206c0ed6e4.tar.gz
linux-335e92e8a515420bd47a6b0f01cb9a206c0ed6e4.tar.bz2
linux-335e92e8a515420bd47a6b0f01cb9a206c0ed6e4.zip
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>
Diffstat (limited to 'include/linux/mbcache.h')
-rw-r--r--include/linux/mbcache.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/mbcache.h b/include/linux/mbcache.h
index 99e044b4efc6..a09b84e4fdb4 100644
--- a/include/linux/mbcache.h
+++ b/include/linux/mbcache.h
@@ -34,7 +34,7 @@ void mb_cache_destroy(struct mb_cache *);
/* Functions on cache entries */
-struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *);
+struct mb_cache_entry *mb_cache_entry_alloc(struct mb_cache *, gfp_t);
int mb_cache_entry_insert(struct mb_cache_entry *, struct block_device *,
sector_t, unsigned int[]);
void mb_cache_entry_release(struct mb_cache_entry *);