]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
gfs2: Enable rgrplvb for sb_fs_format 1802
authorAndrew Price <anprice@redhat.com>
Fri, 5 Feb 2021 17:10:17 +0000 (17:10 +0000)
committerAndreas Gruenbacher <agruenba@redhat.com>
Mon, 8 Feb 2021 12:00:36 +0000 (13:00 +0100)
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 <anprice@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/incore.h
fs/gfs2/ops_fstype.c
fs/gfs2/super.h

index 9933af0701210e0fa6da279b6a009daa085a95ec..ade0b85eac64cfe203b4440aa001e19a9bad43af 100644 (file)
@@ -586,6 +586,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 */
index 6118f975030c889d7b6322ff1760b1346150d5a0..c6537e94f4d81aa70b6a7ad1631ab0857e08fd98 100644 (file)
@@ -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 @@ hostdata_error:
        }
 
        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;
 }
@@ -1157,6 +1159,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;
@@ -1450,6 +1456,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;
index c9fb2a654181375165b2330d19b89b1ee91eb6f8..977079693bdc5a1a346c155cd44e4f0d0e0fbde4 100644 (file)
 #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)