summaryrefslogtreecommitdiffstats
path: root/fs/fat/inode.c
diff options
context:
space:
mode:
authorOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>2009-03-12 02:03:23 +0900
committerLinus Torvalds <torvalds@linux-foundation.org>2009-03-11 12:04:18 -0700
commit3a95ea1155c5d44aa58dde2f64f0ddafe27fd1fb (patch)
treede6d6392c58a37a7f13bacf899b3f56c32fabcf4 /fs/fat/inode.c
parentad3bdefe877afb47480418fdb05ecd42842de65e (diff)
downloadkernel-crypto-3a95ea1155c5d44aa58dde2f64f0ddafe27fd1fb.tar.gz
kernel-crypto-3a95ea1155c5d44aa58dde2f64f0ddafe27fd1fb.tar.xz
kernel-crypto-3a95ea1155c5d44aa58dde2f64f0ddafe27fd1fb.zip
Fix _fat_bmap() locking
On swapon() path, it has already i_mutex. So, this uses i_alloc_sem instead of it. Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Reported-by: Laurent GUERBY <laurent@guerby.net> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/fat/inode.c')
-rw-r--r--fs/fat/inode.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/fat/inode.c b/fs/fat/inode.c
index 6b74d09adbe..de0004fe6e0 100644
--- a/fs/fat/inode.c
+++ b/fs/fat/inode.c
@@ -202,9 +202,9 @@ static sector_t _fat_bmap(struct address_space *mapping, sector_t block)
sector_t blocknr;
/* fat_get_cluster() assumes the requested blocknr isn't truncated. */
- mutex_lock(&mapping->host->i_mutex);
+ down_read(&mapping->host->i_alloc_sem);
blocknr = generic_block_bmap(mapping, block, fat_get_block);
- mutex_unlock(&mapping->host->i_mutex);
+ up_read(&mapping->host->i_alloc_sem);
return blocknr;
}