hfs: push lock_super down
authorArtem Bityutskiy <artem.bityutskiy@linux.intel.com>
Thu, 12 Jul 2012 14:28:44 +0000 (17:28 +0300)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 22 Jul 2012 19:58:05 +0000 (23:58 +0400)
HFS uses 'lock_super()'/'unlock_super()' around 'hfs_mdb_commit()' in order
to serialize MDB (Master Directory Block) changes. Push it down to
'hfs_mdb_commit()' in order to simplify the code a bit.

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/hfs/inode.c
fs/hfs/mdb.c
fs/hfs/super.c

index 451c97281b832519ee2db53782f4cfb7c737777c..f2deefdb406684c5f9b592deb580a3356100d946 100644 (file)
@@ -645,11 +645,9 @@ static int hfs_file_fsync(struct file *filp, loff_t start, loff_t end,
        /* sync the superblock to buffers */
        sb = inode->i_sb;
        if (sb->s_dirt) {
-               lock_super(sb);
                sb->s_dirt = 0;
                if (!(sb->s_flags & MS_RDONLY))
                        hfs_mdb_commit(sb);
-               unlock_super(sb);
        }
        /* .. finally sync the buffers to disk */
        err = sync_blockdev(sb->s_bdev);
index 1563d5ce57643e23ac08e3a7db02e0b336603c60..3f558d58fba20513b4aeeb3bf21e15a4ae43a6a3 100644 (file)
@@ -260,6 +260,7 @@ void hfs_mdb_commit(struct super_block *sb)
 {
        struct hfs_mdb *mdb = HFS_SB(sb)->mdb;
 
+       lock_super(sb);
        if (test_and_clear_bit(HFS_FLG_MDB_DIRTY, &HFS_SB(sb)->flags)) {
                /* These parameters may have been modified, so write them back */
                mdb->drLsMod = hfs_mtime();
@@ -317,6 +318,7 @@ void hfs_mdb_commit(struct super_block *sb)
                        size -= len;
                }
        }
+       unlock_super(sb);
 }
 
 void hfs_mdb_close(struct super_block *sb)
index 7b4c537d6e136b42fba064de39b0c57703b5fec3..f7c06bbf33bcbe3aec9325e52ea7122c67dcb6db 100644 (file)
@@ -50,21 +50,17 @@ MODULE_LICENSE("GPL");
  */
 static void hfs_write_super(struct super_block *sb)
 {
-       lock_super(sb);
        sb->s_dirt = 0;
 
        /* sync everything to the buffers */
        if (!(sb->s_flags & MS_RDONLY))
                hfs_mdb_commit(sb);
-       unlock_super(sb);
 }
 
 static int hfs_sync_fs(struct super_block *sb, int wait)
 {
-       lock_super(sb);
        hfs_mdb_commit(sb);
        sb->s_dirt = 0;
-       unlock_super(sb);
 
        return 0;
 }