]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/gfs2/ops_fstype.c
Merge branch 'work.vboxsf' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux.git] / fs / gfs2 / ops_fstype.c
index 8bc20425a8305299f0bf589d262cd01ce639f4a4..a1a8ef7ed3fde76ce1bea1a5e88a5726a96ca839 100644 (file)
@@ -298,6 +298,8 @@ static int gfs2_read_sb(struct gfs2_sbd *sdp, int silent)
                          sizeof(struct gfs2_dinode)) / sizeof(u64);
        sdp->sd_inptrs = (sdp->sd_sb.sb_bsize -
                          sizeof(struct gfs2_meta_header)) / sizeof(u64);
+       sdp->sd_ldptrs = (sdp->sd_sb.sb_bsize -
+                         sizeof(struct gfs2_log_descriptor)) / sizeof(u64);
        sdp->sd_jbsize = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header);
        sdp->sd_hash_bsize = sdp->sd_sb.sb_bsize / 2;
        sdp->sd_hash_bsize_shift = sdp->sd_sb.sb_bsize_shift - 1;
@@ -1250,6 +1252,7 @@ enum gfs2_param {
        Opt_upgrade,
        Opt_acl,
        Opt_quota,
+       Opt_quota_flag,
        Opt_suiddir,
        Opt_data,
        Opt_meta,
@@ -1264,26 +1267,13 @@ enum gfs2_param {
        Opt_loccookie,
 };
 
-enum opt_quota {
-       Opt_quota_unset = 0,
-       Opt_quota_off,
-       Opt_quota_account,
-       Opt_quota_on,
-};
-
 static const struct constant_table gfs2_param_quota[] = {
-       {"off",        Opt_quota_off },
-       {"account",    Opt_quota_account },
-       {"on",         Opt_quota_on },
+       {"off",        GFS2_QUOTA_OFF},
+       {"account",    GFS2_QUOTA_ACCOUNT},
+       {"on",         GFS2_QUOTA_ON},
        {}
 };
 
-static const unsigned int opt_quota_values[] = {
-       [Opt_quota_off]     = GFS2_QUOTA_OFF,
-       [Opt_quota_account] = GFS2_QUOTA_ACCOUNT,
-       [Opt_quota_on]      = GFS2_QUOTA_ON,
-};
-
 enum opt_data {
        Opt_data_writeback = GFS2_DATA_WRITEBACK,
        Opt_data_ordered   = GFS2_DATA_ORDERED,
@@ -1306,7 +1296,7 @@ static const struct constant_table gfs2_param_errors[] = {
        {}
 };
 
-static const struct fs_parameter_spec gfs2_param_specs[] = {
+static const struct fs_parameter_spec gfs2_fs_parameters[] = {
        fsparam_string ("lockproto",          Opt_lockproto),
        fsparam_string ("locktable",          Opt_locktable),
        fsparam_string ("hostdata",           Opt_hostdata),
@@ -1331,15 +1321,11 @@ static const struct fs_parameter_spec gfs2_param_specs[] = {
        fsparam_flag_no("rgrplvb",            Opt_rgrplvb),
        fsparam_flag_no("loccookie",          Opt_loccookie),
        /* quota can be a flag or an enum so it gets special treatment */
-       __fsparam(fs_param_is_enum, "quota", Opt_quota,
-               fs_param_neg_with_no|fs_param_v_optional, gfs2_param_quota),
+       fsparam_flag_no("quota",              Opt_quota_flag),
+       fsparam_enum("quota",                 Opt_quota, gfs2_param_quota),
        {}
 };
 
-static const struct fs_parameter_description gfs2_fs_parameters = {
-       .specs = gfs2_param_specs,
-};
-
 /* Parse a single mount parameter */
 static int gfs2_parse_param(struct fs_context *fc, struct fs_parameter *param)
 {
@@ -1347,7 +1333,7 @@ static int gfs2_parse_param(struct fs_context *fc, struct fs_parameter *param)
        struct fs_parse_result result;
        int o;
 
-       o = fs_parse(fc, &gfs2_fs_parameters, param, &result);
+       o = fs_parse(fc, gfs2_fs_parameters, param, &result);
        if (o < 0)
                return o;
 
@@ -1375,7 +1361,7 @@ static int gfs2_parse_param(struct fs_context *fc, struct fs_parameter *param)
                break;
        case Opt_debug:
                if (result.boolean && args->ar_errors == GFS2_ERRORS_PANIC)
-                       return invalf(fc, "gfs2: -o debug and -o errors=panic are mutually exclusive");
+                       return invalfc(fc, "-o debug and -o errors=panic are mutually exclusive");
                args->ar_debug = result.boolean;
                break;
        case Opt_upgrade:
@@ -1384,17 +1370,11 @@ static int gfs2_parse_param(struct fs_context *fc, struct fs_parameter *param)
        case Opt_acl:
                args->ar_posix_acl = result.boolean;
                break;
+       case Opt_quota_flag:
+               args->ar_quota = result.negated ? GFS2_QUOTA_OFF : GFS2_QUOTA_ON;
+               break;
        case Opt_quota:
-               /* The quota option can be a flag or an enum. A non-zero int_32
-                  result means that we have an enum index. Otherwise we have
-                  to rely on the 'negated' flag to tell us whether 'quota' or
-                  'noquota' was specified. */
-               if (result.negated)
-                       args->ar_quota = GFS2_QUOTA_OFF;
-               else if (result.int_32 > 0)
-                       args->ar_quota = opt_quota_values[result.int_32];
-               else
-                       args->ar_quota = GFS2_QUOTA_ON;
+               args->ar_quota = result.int_32;
                break;
        case Opt_suiddir:
                args->ar_suiddir = result.boolean;
@@ -1411,27 +1391,27 @@ static int gfs2_parse_param(struct fs_context *fc, struct fs_parameter *param)
                break;
        case Opt_commit:
                if (result.int_32 <= 0)
-                       return invalf(fc, "gfs2: commit mount option requires a positive numeric argument");
+                       return invalfc(fc, "commit mount option requires a positive numeric argument");
                args->ar_commit = result.int_32;
                break;
        case Opt_statfs_quantum:
                if (result.int_32 < 0)
-                       return invalf(fc, "gfs2: statfs_quantum mount option requires a non-negative numeric argument");
+                       return invalfc(fc, "statfs_quantum mount option requires a non-negative numeric argument");
                args->ar_statfs_quantum = result.int_32;
                break;
        case Opt_quota_quantum:
                if (result.int_32 <= 0)
-                       return invalf(fc, "gfs2: quota_quantum mount option requires a positive numeric argument");
+                       return invalfc(fc, "quota_quantum mount option requires a positive numeric argument");
                args->ar_quota_quantum = result.int_32;
                break;
        case Opt_statfs_percent:
                if (result.int_32 < 0 || result.int_32 > 100)
-                       return invalf(fc, "gfs2: statfs_percent mount option requires a numeric argument between 0 and 100");
+                       return invalfc(fc, "statfs_percent mount option requires a numeric argument between 0 and 100");
                args->ar_statfs_percent = result.int_32;
                break;
        case Opt_errors:
                if (args->ar_debug && result.uint_32 == GFS2_ERRORS_PANIC)
-                       return invalf(fc, "gfs2: -o debug and -o errors=panic are mutually exclusive");
+                       return invalfc(fc, "-o debug and -o errors=panic are mutually exclusive");
                args->ar_errors = result.uint_32;
                break;
        case Opt_barrier:
@@ -1444,7 +1424,7 @@ static int gfs2_parse_param(struct fs_context *fc, struct fs_parameter *param)
                args->ar_loccookie = result.boolean;
                break;
        default:
-               return invalf(fc, "gfs2: invalid mount option: %s", param->key);
+               return invalfc(fc, "invalid mount option: %s", param->key);
        }
        return 0;
 }
@@ -1470,27 +1450,27 @@ static int gfs2_reconfigure(struct fs_context *fc)
        spin_unlock(&gt->gt_spin);
 
        if (strcmp(newargs->ar_lockproto, oldargs->ar_lockproto)) {
-               errorf(fc, "gfs2: reconfiguration of locking protocol not allowed");
+               errorfc(fc, "reconfiguration of locking protocol not allowed");
                return -EINVAL;
        }
        if (strcmp(newargs->ar_locktable, oldargs->ar_locktable)) {
-               errorf(fc, "gfs2: reconfiguration of lock table not allowed");
+               errorfc(fc, "reconfiguration of lock table not allowed");
                return -EINVAL;
        }
        if (strcmp(newargs->ar_hostdata, oldargs->ar_hostdata)) {
-               errorf(fc, "gfs2: reconfiguration of host data not allowed");
+               errorfc(fc, "reconfiguration of host data not allowed");
                return -EINVAL;
        }
        if (newargs->ar_spectator != oldargs->ar_spectator) {
-               errorf(fc, "gfs2: reconfiguration of spectator mode not allowed");
+               errorfc(fc, "reconfiguration of spectator mode not allowed");
                return -EINVAL;
        }
        if (newargs->ar_localflocks != oldargs->ar_localflocks) {
-               errorf(fc, "gfs2: reconfiguration of localflocks not allowed");
+               errorfc(fc, "reconfiguration of localflocks not allowed");
                return -EINVAL;
        }
        if (newargs->ar_meta != oldargs->ar_meta) {
-               errorf(fc, "gfs2: switching between gfs2 and gfs2meta not allowed");
+               errorfc(fc, "switching between gfs2 and gfs2meta not allowed");
                return -EINVAL;
        }
        if (oldargs->ar_spectator)
@@ -1500,11 +1480,11 @@ static int gfs2_reconfigure(struct fs_context *fc)
                if (fc->sb_flags & SB_RDONLY) {
                        error = gfs2_make_fs_ro(sdp);
                        if (error)
-                               errorf(fc, "gfs2: unable to remount read-only");
+                               errorfc(fc, "unable to remount read-only");
                } else {
                        error = gfs2_make_fs_rw(sdp);
                        if (error)
-                               errorf(fc, "gfs2: unable to remount read-write");
+                               errorfc(fc, "unable to remount read-write");
                }
        }
        sdp->sd_args = *newargs;
@@ -1649,7 +1629,7 @@ struct file_system_type gfs2_fs_type = {
        .name = "gfs2",
        .fs_flags = FS_REQUIRES_DEV,
        .init_fs_context = gfs2_init_fs_context,
-       .parameters = &gfs2_fs_parameters,
+       .parameters = gfs2_fs_parameters,
        .kill_sb = gfs2_kill_sb,
        .owner = THIS_MODULE,
 };