summaryrefslogtreecommitdiffstats
path: root/fs/gfs2/super.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2009-10-30 08:03:27 +0100
committerSteven Whitehouse <swhiteho@redhat.com>2009-12-03 11:55:54 +0000
commitf25934c5f88655a8d5c3c40a540daed1f0e6dedc (patch)
treea21e1ab167314292ffe2e3b319c8d5abf5faccd7 /fs/gfs2/super.c
parentc14f5735e724cb5338ca8298d42b1658008a10d7 (diff)
downloadlinux-f25934c5f88655a8d5c3c40a540daed1f0e6dedc.tar.gz
linux-f25934c5f88655a8d5c3c40a540daed1f0e6dedc.tar.bz2
linux-f25934c5f88655a8d5c3c40a540daed1f0e6dedc.zip
GFS2: add barrier/nobarrier mount options
Currently gfs2 issues barrier unconditionally. There are various reasons to disable them, be that just for testing or for stupid devices flushing large battert backed caches. Add a nobarrier option that matches xfs and btrfs for this. Also add a symmetric barrier option to turn it back on at remount time. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/super.c')
-rw-r--r--fs/gfs2/super.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index b1dcfab36465..5e4b31441a9e 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -73,6 +73,8 @@ enum {
Opt_statfs_quantum,
Opt_statfs_percent,
Opt_quota_quantum,
+ Opt_barrier,
+ Opt_nobarrier,
Opt_error,
};
@@ -107,6 +109,8 @@ static const match_table_t tokens = {
{Opt_statfs_quantum, "statfs_quantum=%d"},
{Opt_statfs_percent, "statfs_percent=%d"},
{Opt_quota_quantum, "quota_quantum=%d"},
+ {Opt_barrier, "barrier"},
+ {Opt_nobarrier, "nobarrier"},
{Opt_error, NULL}
};
@@ -253,6 +257,12 @@ int gfs2_mount_args(struct gfs2_args *args, char *options)
}
args->ar_errors = GFS2_ERRORS_PANIC;
break;
+ case Opt_barrier:
+ args->ar_nobarrier = 0;
+ break;
+ case Opt_nobarrier:
+ args->ar_nobarrier = 1;
+ break;
case Opt_error:
default:
printk(KERN_WARNING "GFS2: invalid mount option: %s\n", o);
@@ -1143,6 +1153,10 @@ static int gfs2_remount_fs(struct super_block *sb, int *flags, char *data)
sb->s_flags |= MS_POSIXACL;
else
sb->s_flags &= ~MS_POSIXACL;
+ if (sdp->sd_args.ar_nobarrier)
+ set_bit(SDF_NOBARRIERS, &sdp->sd_flags);
+ else
+ clear_bit(SDF_NOBARRIERS, &sdp->sd_flags);
spin_lock(&gt->gt_spin);
gt->gt_log_flush_secs = args.ar_commit;
gt->gt_quota_quantum = args.ar_quota_quantum;