----- Original Message ----- > Turn on rgrplvb by default for sb_fs_format > 1801. > > Mount options still have to override this so a new args field to > differentiate between 'off' and 'not specified' is added, and the new > default is applied only when it's not specified. > > Signed-off-by: Andrew Price <[email protected]> > --- > fs/gfs2/incore.h | 1 + > fs/gfs2/ops_fstype.c | 13 ++++++++++--- > fs/gfs2/super.h | 4 ++++ > 3 files changed, 15 insertions(+), 3 deletions(-) > > diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h > index 8e1ab8ed4abc..ac4d5e619ecf 100644 > --- a/fs/gfs2/incore.h > +++ b/fs/gfs2/incore.h > @@ -585,6 +585,7 @@ struct gfs2_args { > unsigned int ar_errors:2; /* errors=withdraw | panic */ > unsigned int ar_nobarrier:1; /* do not send barriers */ > unsigned int ar_rgrplvb:1; /* use lvbs for rgrp info */ > + unsigned int ar_got_rgrplvb:1; /* Was the rgrplvb opt given? */ > unsigned int ar_loccookie:1; /* use location based readdir > cookies */ > s32 ar_commit; /* Commit interval */ > diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c > index 61fce59cb4d3..52fe78378faa 100644 > --- a/fs/gfs2/ops_fstype.c > +++ b/fs/gfs2/ops_fstype.c > @@ -171,7 +171,8 @@ static int gfs2_check_sb(struct gfs2_sbd *sdp, int > silent) > return -EINVAL; > } > > - if (sb->sb_fs_format != GFS2_FORMAT_FS || > + if (sb->sb_fs_format < GFS2_FS_FORMAT_MIN || > + sb->sb_fs_format > GFS2_FS_FORMAT_MAX || > sb->sb_multihost_format != GFS2_FORMAT_MULTI) { > fs_warn(sdp, "Unknown on-disk format, unable to mount\n"); > return -EINVAL; > @@ -1032,13 +1033,14 @@ static int gfs2_lm_mount(struct gfs2_sbd *sdp, int > silent) > } > > if (lm->lm_mount == NULL) { > - fs_info(sdp, "Now mounting FS...\n"); > + fs_info(sdp, "Now mounting FS (format %u)...\n", > sdp->sd_sb.sb_fs_format); > complete_all(&sdp->sd_locking_init); > return 0; > } > ret = lm->lm_mount(sdp, table); > if (ret == 0) > - fs_info(sdp, "Joined cluster. Now mounting FS...\n"); > + fs_info(sdp, "Joined cluster. Now mounting FS (format %u)...\n", > + sdp->sd_sb.sb_fs_format); > complete_all(&sdp->sd_locking_init); > return ret; > } > @@ -1156,6 +1158,10 @@ static int gfs2_fill_super(struct super_block *sb, > struct fs_context *fc) > if (error) > goto fail_locking; > > + /* Turn rgrplvb on by default if fs format is recent enough */ > + if (!sdp->sd_args.ar_got_rgrplvb && sdp->sd_sb.sb_fs_format > 1801) > + sdp->sd_args.ar_rgrplvb = 1; > + > error = wait_on_journal(sdp); > if (error) > goto fail_sb; > @@ -1456,6 +1462,7 @@ static int gfs2_parse_param(struct fs_context *fc, > struct fs_parameter *param) > break; > case Opt_rgrplvb: > args->ar_rgrplvb = result.boolean; > + args->ar_got_rgrplvb = 1; > break; > case Opt_loccookie: > args->ar_loccookie = result.boolean; > diff --git a/fs/gfs2/super.h b/fs/gfs2/super.h > index c9fb2a654181..977079693bdc 100644 > --- a/fs/gfs2/super.h > +++ b/fs/gfs2/super.h > @@ -11,6 +11,10 @@ > #include <linux/dcache.h> > #include "incore.h" > > +/* Supported fs format version range */ > +#define GFS2_FS_FORMAT_MIN (1801) > +#define GFS2_FS_FORMAT_MAX (1802) > + > extern void gfs2_lm_unmount(struct gfs2_sbd *sdp); > > static inline unsigned int gfs2_jindex_size(struct gfs2_sbd *sdp) > -- > 2.29.2 > > Looks good. Thanks, Andy! Reviewed-by: Bob Peterson <[email protected]>
Bob Peterson
