Hi,

Thanks for the patch. I've pushed it to the -nmw tree now. I've also
added a two-liner of my own to display the nobarrier option
in /proc/mounts,

Steve.

On Fri, 2009-10-30 at 08:03 +0100, Christoph Hellwig wrote:
> 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 <h...@lst.de>
> 
> Index: linux-2.6/fs/gfs2/incore.h
> ===================================================================
> --- linux-2.6.orig/fs/gfs2/incore.h   2009-10-30 07:43:42.246023792 +0100
> +++ linux-2.6/fs/gfs2/incore.h        2009-10-30 07:44:11.173255988 +0100
> @@ -429,6 +429,7 @@ struct gfs2_args {
>       unsigned int ar_meta:1;                 /* mount metafs */
>       unsigned int ar_discard:1;              /* discard requests */
>       unsigned int ar_errors:2;               /* errors=withdraw | panic */
> +     unsigned int ar_nobarrier:1;            /* do not send barriers */
>       int ar_commit;                          /* Commit interval */
>  };
>  
> Index: linux-2.6/fs/gfs2/super.c
> ===================================================================
> --- linux-2.6.orig/fs/gfs2/super.c    2009-10-30 07:44:29.832024397 +0100
> +++ linux-2.6/fs/gfs2/super.c 2009-10-30 07:53:24.117033618 +0100
> @@ -70,6 +70,8 @@ enum {
>       Opt_commit,
>       Opt_err_withdraw,
>       Opt_err_panic,
> +     Opt_barrier,
> +     Opt_nobarrier,
>       Opt_error,
>  };
>  
> @@ -98,6 +100,8 @@ static const match_table_t tokens = {
>       {Opt_meta, "meta"},
>       {Opt_discard, "discard"},
>       {Opt_nodiscard, "nodiscard"},
> +     {Opt_barrier, "barrier"},
> +     {Opt_nobarrier, "nobarrier"},
>       {Opt_commit, "commit=%d"},
>       {Opt_err_withdraw, "errors=withdraw"},
>       {Opt_err_panic, "errors=panic"},
> @@ -207,6 +211,12 @@ int gfs2_mount_args(struct gfs2_sbd *sdp
>               case Opt_nodiscard:
>                       args->ar_discard = 0;
>                       break;
> +             case Opt_barrier:
> +                     args->ar_nobarrier = 0;
> +                     break;
> +             case Opt_nobarrier:
> +                     args->ar_nobarrier = 1;
> +                     break;
>               case Opt_commit:
>                       rv = match_int(&tmp[0], &args->ar_commit);
>                       if (rv || args->ar_commit <= 0) {
> @@ -1097,6 +1107,10 @@ static int gfs2_remount_fs(struct super_
>               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;
>       spin_unlock(&gt->gt_spin);
> Index: linux-2.6/fs/gfs2/ops_fstype.c
> ===================================================================
> --- linux-2.6.orig/fs/gfs2/ops_fstype.c       2009-10-30 07:52:11.050003877 
> +0100
> +++ linux-2.6/fs/gfs2/ops_fstype.c    2009-10-30 07:52:53.053005337 +0100
> @@ -1143,6 +1143,8 @@ static int fill_super(struct super_block
>       }
>       if (sdp->sd_args.ar_posix_acl)
>               sb->s_flags |= MS_POSIXACL;
> +     if (sdp->sd_args.ar_nobarrier)
> +             set_bit(SDF_NOBARRIERS, &sdp->sd_flags);
>  
>       sb->s_magic = GFS2_MAGIC;
>       sb->s_op = &gfs2_super_ops;

Reply via email to