Skip to content

Commit

Permalink
[GFS2] Fix incorrect fs sync behaviour.
Browse files Browse the repository at this point in the history
This adds a sync_fs superblock operation for GFS2 and removes
the journal flush from write_super in favour of sync_fs where it
ought to be. This is more or less identical to the way in which ext3
does this.

This bug was pointed out by Russell Cattelan <cattelan@redhat.com>

Cc: Russell Cattelan <cattelan@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
  • Loading branch information
Steven Whitehouse committed Nov 6, 2006
1 parent eb1dc33 commit 4a22195
Showing 1 changed file with 28 additions and 16 deletions.
44 changes: 28 additions & 16 deletions fs/gfs2/ops_super.c
Original file line number Diff line number Diff line change
Expand Up @@ -138,16 +138,27 @@ static void gfs2_put_super(struct super_block *sb)
}

/**
* gfs2_write_super - disk commit all incore transactions
* @sb: the filesystem
* gfs2_write_super
* @sb: the superblock
*
* This function is called every time sync(2) is called.
* After this exits, all dirty buffers are synced.
*/

static void gfs2_write_super(struct super_block *sb)
{
sb->s_dirt = 0;
}

/**
* gfs2_sync_fs - sync the filesystem
* @sb: the superblock
*
* Flushes the log to disk.
*/
static int gfs2_sync_fs(struct super_block *sb, int wait)
{
sb->s_dirt = 0;
gfs2_log_flush(sb->s_fs_info, NULL);
return 0;
}

/**
Expand Down Expand Up @@ -452,17 +463,18 @@ static void gfs2_destroy_inode(struct inode *inode)
}

struct super_operations gfs2_super_ops = {
.alloc_inode = gfs2_alloc_inode,
.destroy_inode = gfs2_destroy_inode,
.write_inode = gfs2_write_inode,
.delete_inode = gfs2_delete_inode,
.put_super = gfs2_put_super,
.write_super = gfs2_write_super,
.write_super_lockfs = gfs2_write_super_lockfs,
.unlockfs = gfs2_unlockfs,
.statfs = gfs2_statfs,
.remount_fs = gfs2_remount_fs,
.clear_inode = gfs2_clear_inode,
.show_options = gfs2_show_options,
.alloc_inode = gfs2_alloc_inode,
.destroy_inode = gfs2_destroy_inode,
.write_inode = gfs2_write_inode,
.delete_inode = gfs2_delete_inode,
.put_super = gfs2_put_super,
.write_super = gfs2_write_super,
.sync_fs = gfs2_sync_fs,
.write_super_lockfs = gfs2_write_super_lockfs,
.unlockfs = gfs2_unlockfs,
.statfs = gfs2_statfs,
.remount_fs = gfs2_remount_fs,
.clear_inode = gfs2_clear_inode,
.show_options = gfs2_show_options,
};

0 comments on commit 4a22195

Please sign in to comment.