From: Chris Mason The correct lock ordering is inode lock -> BKL Signed-off-by: Chris Mason Signed-off-by: Andrew Morton --- fs/reiserfs/file.c | 2 +- fs/reiserfs/ioctl.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff -puN fs/reiserfs/file.c~fix-reiserfs-lock-inversion-of-bkl-vs-inode-semaphore fs/reiserfs/file.c --- a/fs/reiserfs/file.c~fix-reiserfs-lock-inversion-of-bkl-vs-inode-semaphore +++ a/fs/reiserfs/file.c @@ -48,8 +48,8 @@ static int reiserfs_file_release(struct 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 -puN fs/reiserfs/ioctl.c~fix-reiserfs-lock-inversion-of-bkl-vs-inode-semaphore fs/reiserfs/ioctl.c --- a/fs/reiserfs/ioctl.c~fix-reiserfs-lock-inversion-of-bkl-vs-inode-semaphore +++ a/fs/reiserfs/ioctl.c @@ -116,12 +116,12 @@ static int reiserfs_unpack(struct inode 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. */ _