BKL: Remove BKL from ext2 filesystem
The BKL is still used in ext2_put_super(), ext2_fill_super(), ext2_sync_fs() ext2_remount() and ext2_write_inode(). From these calls ext2_put_super(), ext2_fill_super() and ext2_remount() are protected against each other by the struct super_block s_umount rw semaphore. The call in ext2_write_inode() could only protect the modification of the ext2_sb_info through ext2_update_dynamic_rev() against concurrent ext2_sync_fs() or ext2_remount(). ext2_fill_super() and ext2_put_super() can be left out because you need a valid filesystem reference in all three cases, which you do not have when you are one of these functions. If the BKL is only protecting the modification of the ext2_sb_info it can safely be removed since this is protected by the struct ext2_sb_info s_lock. Signed-off-by: Jan Blunck <jblunck@suse.de> Cc: Jan Kara <jack@suse.cz> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
@@ -22,7 +22,6 @@
|
||||
* Assorted race fixes, rewrite of ext2_get_block() by Al Viro, 2000
|
||||
*/
|
||||
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/time.h>
|
||||
#include <linux/highuid.h>
|
||||
#include <linux/pagemap.h>
|
||||
@@ -1406,13 +1405,11 @@ static int __ext2_write_inode(struct inode *inode, int do_sync)
|
||||
/* If this is the first large file
|
||||
* created, add a flag to the superblock.
|
||||
*/
|
||||
lock_kernel();
|
||||
spin_lock(&EXT2_SB(sb)->s_lock);
|
||||
ext2_update_dynamic_rev(sb);
|
||||
EXT2_SET_RO_COMPAT_FEATURE(sb,
|
||||
EXT2_FEATURE_RO_COMPAT_LARGE_FILE);
|
||||
spin_unlock(&EXT2_SB(sb)->s_lock);
|
||||
unlock_kernel();
|
||||
ext2_write_super(sb);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user