[PATCH] fix reiserfs lock inversion of bkl vs inode semaphore The correct lock ordering is inode lock -> BKL Signed-off-by: Chris Mason <mason@suse.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff --git a/fs/reiserfs/file.c b/fs/reiserfs/file.c index f318b58..1627edd 100644 --- a/fs/reiserfs/file.c +++ b/fs/reiserfs/file.c
@@ -48,8 +48,8 @@ return 0; } - reiserfs_write_lock(inode->i_sb); mutex_lock(&inode->i_mutex); + reiserfs_write_lock(inode->i_sb); /* freeing preallocation only involves relogging blocks that * are already in the current transaction. preallocation gets * freed at the end of each transaction, so it is impossible for
diff --git a/fs/reiserfs/ioctl.c b/fs/reiserfs/ioctl.c index 745c881..a986b5e 100644 --- a/fs/reiserfs/ioctl.c +++ b/fs/reiserfs/ioctl.c
@@ -116,12 +116,12 @@ if (REISERFS_I(inode)->i_flags & i_nopack_mask) { return 0; } - reiserfs_write_lock(inode->i_sb); /* we need to make sure nobody is changing the file size beneath ** us */ mutex_lock(&inode->i_mutex); + reiserfs_write_lock(inode->i_sb); write_from = inode->i_size & (blocksize - 1); /* if we are on a block boundary, we are already unpacked. */