summaryrefslogtreecommitdiffstats
path: root/fs/fat
diff options
context:
space:
mode:
authorOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>2009-03-11 18:03:23 +0100
committerLinus Torvalds <torvalds@linux-foundation.org>2009-03-11 20:04:18 +0100
commit3a95ea1155c5d44aa58dde2f64f0ddafe27fd1fb (patch)
treede6d6392c58a37a7f13bacf899b3f56c32fabcf4 /fs/fat
parentproc: fix kflags to uflags copying in /proc/kpageflags (diff)
downloadlinux-3a95ea1155c5d44aa58dde2f64f0ddafe27fd1fb.tar.xz
linux-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')
-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 6b74d09adbe5..de0004fe6e00 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;
}