nilfs2: fix disorder of nilfs_write_super in nilfs_sync_fs
authorJiro SEKIBA <jir@unicus.jp>
Wed, 22 Jul 2009 16:26:33 +0000 (01:26 +0900)
committerRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Mon, 14 Sep 2009 09:27:14 +0000 (18:27 +0900)
This fixes disorder of nilfs_write_super in nilfs_sync_fs.  Commiting
super block must be the end of the function so that every changes are
reflected.

->sync_fs() is not called frequently so this makes nilfs_sync_fs call
nilfs_commit_super instead of nilfs_write_super.

Signed-off-by: Jiro SEKIBA <jir@unicus.jp>
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
fs/nilfs2/super.c

index e543eda..9926a1d 100644 (file)
@@ -385,13 +385,19 @@ static void nilfs_write_super(struct super_block *sb)
 
 static int nilfs_sync_fs(struct super_block *sb, int wait)
 {
+       struct nilfs_sb_info *sbi = NILFS_SB(sb);
+       struct the_nilfs *nilfs = sbi->s_nilfs;
        int err = 0;
 
-       nilfs_write_super(sb);
-
        /* This function is called when super block should be written back */
        if (wait)
                err = nilfs_construct_segment(sb);
+
+       down_write(&nilfs->ns_sem);
+       if (sb->s_dirt)
+               nilfs_commit_super(sbi, 1);
+       up_write(&nilfs->ns_sem);
+
        return err;
 }