hfsplus: always use hfsplus_sync_fs to write the volume header
authorChristoph Hellwig <hch@tuxera.com>
Tue, 23 Nov 2010 13:37:43 +0000 (14:37 +0100)
committerChristoph Hellwig <hch@lst.de>
Tue, 23 Nov 2010 13:37:43 +0000 (14:37 +0100)
Remove opencoded writing of the volume header in hfsplus_fill_super
and hfsplus_put_super and offload it to hfsplus_sync_fs.  In the
put_super case this means we only write the superblock once instead
of twice.

Signed-off-by: Christoph Hellwig <hch@tuxera.com>
fs/hfsplus/super.c

index 9bda9fd..6a23490 100644 (file)
@@ -215,16 +215,14 @@ static void hfsplus_put_super(struct super_block *sb)
        if (!sb->s_fs_info)
                return;
 
-       if (sb->s_dirt)
-               hfsplus_write_super(sb);
        if (!(sb->s_flags & MS_RDONLY) && sbi->s_vhdr) {
                struct hfsplus_vh *vhdr = sbi->s_vhdr;
 
                vhdr->modify_date = hfsp_now2mt();
                vhdr->attributes |= cpu_to_be32(HFSPLUS_VOL_UNMNT);
                vhdr->attributes &= cpu_to_be32(~HFSPLUS_VOL_INCNSTNT);
-               mark_buffer_dirty(sbi->s_vhbh);
-               sync_dirty_buffer(sbi->s_vhbh);
+
+               hfsplus_sync_fs(sb, 1);
        }
 
        hfs_btree_close(sbi->cat_tree);
@@ -447,8 +445,7 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
        be32_add_cpu(&vhdr->write_count, 1);
        vhdr->attributes &= cpu_to_be32(~HFSPLUS_VOL_UNMNT);
        vhdr->attributes |= cpu_to_be32(HFSPLUS_VOL_INCNSTNT);
-       mark_buffer_dirty(sbi->s_vhbh);
-       sync_dirty_buffer(sbi->s_vhbh);
+       hfsplus_sync_fs(sb, 1);
 
        if (!sbi->hidden_dir) {
                mutex_lock(&sbi->vh_mutex);