Merge drm/drm-fixes into drm-misc-fixes
[linux-2.6-microblaze.git] / fs / gfs2 / super.c
index 644c70a..5fa1eec 100644 (file)
 #include "xattr.h"
 #include "lops.h"
 
-#define args_neq(a1, a2, x) ((a1)->ar_##x != (a2)->ar_##x)
-
-enum {
-       Opt_lockproto,
-       Opt_locktable,
-       Opt_hostdata,
-       Opt_spectator,
-       Opt_ignore_local_fs,
-       Opt_localflocks,
-       Opt_localcaching,
-       Opt_debug,
-       Opt_nodebug,
-       Opt_upgrade,
-       Opt_acl,
-       Opt_noacl,
-       Opt_quota_off,
-       Opt_quota_account,
-       Opt_quota_on,
-       Opt_quota,
-       Opt_noquota,
-       Opt_suiddir,
-       Opt_nosuiddir,
-       Opt_data_writeback,
-       Opt_data_ordered,
-       Opt_meta,
-       Opt_discard,
-       Opt_nodiscard,
-       Opt_commit,
-       Opt_err_withdraw,
-       Opt_err_panic,
-       Opt_statfs_quantum,
-       Opt_statfs_percent,
-       Opt_quota_quantum,
-       Opt_barrier,
-       Opt_nobarrier,
-       Opt_rgrplvb,
-       Opt_norgrplvb,
-       Opt_loccookie,
-       Opt_noloccookie,
-       Opt_error,
-};
-
-static const match_table_t tokens = {
-       {Opt_lockproto, "lockproto=%s"},
-       {Opt_locktable, "locktable=%s"},
-       {Opt_hostdata, "hostdata=%s"},
-       {Opt_spectator, "spectator"},
-       {Opt_spectator, "norecovery"},
-       {Opt_ignore_local_fs, "ignore_local_fs"},
-       {Opt_localflocks, "localflocks"},
-       {Opt_localcaching, "localcaching"},
-       {Opt_debug, "debug"},
-       {Opt_nodebug, "nodebug"},
-       {Opt_upgrade, "upgrade"},
-       {Opt_acl, "acl"},
-       {Opt_noacl, "noacl"},
-       {Opt_quota_off, "quota=off"},
-       {Opt_quota_account, "quota=account"},
-       {Opt_quota_on, "quota=on"},
-       {Opt_quota, "quota"},
-       {Opt_noquota, "noquota"},
-       {Opt_suiddir, "suiddir"},
-       {Opt_nosuiddir, "nosuiddir"},
-       {Opt_data_writeback, "data=writeback"},
-       {Opt_data_ordered, "data=ordered"},
-       {Opt_meta, "meta"},
-       {Opt_discard, "discard"},
-       {Opt_nodiscard, "nodiscard"},
-       {Opt_commit, "commit=%d"},
-       {Opt_err_withdraw, "errors=withdraw"},
-       {Opt_err_panic, "errors=panic"},
-       {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_rgrplvb, "rgrplvb"},
-       {Opt_norgrplvb, "norgrplvb"},
-       {Opt_loccookie, "loccookie"},
-       {Opt_noloccookie, "noloccookie"},
-       {Opt_error, NULL}
-};
-
-/**
- * gfs2_mount_args - Parse mount options
- * @args: The structure into which the parsed options will be written
- * @options: The options to parse
- *
- * Return: errno
- */
-
-int gfs2_mount_args(struct gfs2_args *args, char *options)
-{
-       char *o;
-       int token;
-       substring_t tmp[MAX_OPT_ARGS];
-       int rv;
-
-       /* Split the options into tokens with the "," character and
-          process them */
-
-       while (1) {
-               o = strsep(&options, ",");
-               if (o == NULL)
-                       break;
-               if (*o == '\0')
-                       continue;
-
-               token = match_token(o, tokens, tmp);
-               switch (token) {
-               case Opt_lockproto:
-                       match_strlcpy(args->ar_lockproto, &tmp[0],
-                                     GFS2_LOCKNAME_LEN);
-                       break;
-               case Opt_locktable:
-                       match_strlcpy(args->ar_locktable, &tmp[0],
-                                     GFS2_LOCKNAME_LEN);
-                       break;
-               case Opt_hostdata:
-                       match_strlcpy(args->ar_hostdata, &tmp[0],
-                                     GFS2_LOCKNAME_LEN);
-                       break;
-               case Opt_spectator:
-                       args->ar_spectator = 1;
-                       break;
-               case Opt_ignore_local_fs:
-                       /* Retained for backwards compat only */
-                       break;
-               case Opt_localflocks:
-                       args->ar_localflocks = 1;
-                       break;
-               case Opt_localcaching:
-                       /* Retained for backwards compat only */
-                       break;
-               case Opt_debug:
-                       if (args->ar_errors == GFS2_ERRORS_PANIC) {
-                               pr_warn("-o debug and -o errors=panic are mutually exclusive\n");
-                               return -EINVAL;
-                       }
-                       args->ar_debug = 1;
-                       break;
-               case Opt_nodebug:
-                       args->ar_debug = 0;
-                       break;
-               case Opt_upgrade:
-                       /* Retained for backwards compat only */
-                       break;
-               case Opt_acl:
-                       args->ar_posix_acl = 1;
-                       break;
-               case Opt_noacl:
-                       args->ar_posix_acl = 0;
-                       break;
-               case Opt_quota_off:
-               case Opt_noquota:
-                       args->ar_quota = GFS2_QUOTA_OFF;
-                       break;
-               case Opt_quota_account:
-                       args->ar_quota = GFS2_QUOTA_ACCOUNT;
-                       break;
-               case Opt_quota_on:
-               case Opt_quota:
-                       args->ar_quota = GFS2_QUOTA_ON;
-                       break;
-               case Opt_suiddir:
-                       args->ar_suiddir = 1;
-                       break;
-               case Opt_nosuiddir:
-                       args->ar_suiddir = 0;
-                       break;
-               case Opt_data_writeback:
-                       args->ar_data = GFS2_DATA_WRITEBACK;
-                       break;
-               case Opt_data_ordered:
-                       args->ar_data = GFS2_DATA_ORDERED;
-                       break;
-               case Opt_meta:
-                       args->ar_meta = 1;
-                       break;
-               case Opt_discard:
-                       args->ar_discard = 1;
-                       break;
-               case Opt_nodiscard:
-                       args->ar_discard = 0;
-                       break;
-               case Opt_commit:
-                       rv = match_int(&tmp[0], &args->ar_commit);
-                       if (rv || args->ar_commit <= 0) {
-                               pr_warn("commit mount option requires a positive numeric argument\n");
-                               return rv ? rv : -EINVAL;
-                       }
-                       break;
-               case Opt_statfs_quantum:
-                       rv = match_int(&tmp[0], &args->ar_statfs_quantum);
-                       if (rv || args->ar_statfs_quantum < 0) {
-                               pr_warn("statfs_quantum mount option requires a non-negative numeric argument\n");
-                               return rv ? rv : -EINVAL;
-                       }
-                       break;
-               case Opt_quota_quantum:
-                       rv = match_int(&tmp[0], &args->ar_quota_quantum);
-                       if (rv || args->ar_quota_quantum <= 0) {
-                               pr_warn("quota_quantum mount option requires a positive numeric argument\n");
-                               return rv ? rv : -EINVAL;
-                       }
-                       break;
-               case Opt_statfs_percent:
-                       rv = match_int(&tmp[0], &args->ar_statfs_percent);
-                       if (rv || args->ar_statfs_percent < 0 ||
-                           args->ar_statfs_percent > 100) {
-                               pr_warn("statfs_percent mount option requires a numeric argument between 0 and 100\n");
-                               return rv ? rv : -EINVAL;
-                       }
-                       break;
-               case Opt_err_withdraw:
-                       args->ar_errors = GFS2_ERRORS_WITHDRAW;
-                       break;
-               case Opt_err_panic:
-                       if (args->ar_debug) {
-                               pr_warn("-o debug and -o errors=panic are mutually exclusive\n");
-                               return -EINVAL;
-                       }
-                       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_rgrplvb:
-                       args->ar_rgrplvb = 1;
-                       break;
-               case Opt_norgrplvb:
-                       args->ar_rgrplvb = 0;
-                       break;
-               case Opt_loccookie:
-                       args->ar_loccookie = 1;
-                       break;
-               case Opt_noloccookie:
-                       args->ar_loccookie = 0;
-                       break;
-               case Opt_error:
-               default:
-                       pr_warn("invalid mount option: %s\n", o);
-                       return -EINVAL;
-               }
-       }
-
-       return 0;
-}
-
 /**
  * gfs2_jindex_free - Clear all the journal index information
  * @sdp: The GFS2 superblock
@@ -847,7 +595,7 @@ out:
  * Returns: errno
  */
 
-static int gfs2_make_fs_ro(struct gfs2_sbd *sdp)
+int gfs2_make_fs_ro(struct gfs2_sbd *sdp)
 {
        struct gfs2_holder freeze_gh;
        int error;
@@ -1226,84 +974,6 @@ static int gfs2_statfs(struct dentry *dentry, struct kstatfs *buf)
        return 0;
 }
 
-/**
- * gfs2_remount_fs - called when the FS is remounted
- * @sb:  the filesystem
- * @flags:  the remount flags
- * @data:  extra data passed in (not used right now)
- *
- * Returns: errno
- */
-
-static int gfs2_remount_fs(struct super_block *sb, int *flags, char *data)
-{
-       struct gfs2_sbd *sdp = sb->s_fs_info;
-       struct gfs2_args args = sdp->sd_args; /* Default to current settings */
-       struct gfs2_tune *gt = &sdp->sd_tune;
-       int error;
-
-       sync_filesystem(sb);
-
-       spin_lock(&gt->gt_spin);
-       args.ar_commit = gt->gt_logd_secs;
-       args.ar_quota_quantum = gt->gt_quota_quantum;
-       if (gt->gt_statfs_slow)
-               args.ar_statfs_quantum = 0;
-       else
-               args.ar_statfs_quantum = gt->gt_statfs_quantum;
-       spin_unlock(&gt->gt_spin);
-       error = gfs2_mount_args(&args, data);
-       if (error)
-               return error;
-
-       /* Not allowed to change locking details */
-       if (strcmp(args.ar_lockproto, sdp->sd_args.ar_lockproto) ||
-           strcmp(args.ar_locktable, sdp->sd_args.ar_locktable) ||
-           strcmp(args.ar_hostdata, sdp->sd_args.ar_hostdata))
-               return -EINVAL;
-
-       /* Some flags must not be changed */
-       if (args_neq(&args, &sdp->sd_args, spectator) ||
-           args_neq(&args, &sdp->sd_args, localflocks) ||
-           args_neq(&args, &sdp->sd_args, meta))
-               return -EINVAL;
-
-       if (sdp->sd_args.ar_spectator)
-               *flags |= SB_RDONLY;
-
-       if ((sb->s_flags ^ *flags) & SB_RDONLY) {
-               if (*flags & SB_RDONLY)
-                       error = gfs2_make_fs_ro(sdp);
-               else
-                       error = gfs2_make_fs_rw(sdp);
-       }
-
-       sdp->sd_args = args;
-       if (sdp->sd_args.ar_posix_acl)
-               sb->s_flags |= SB_POSIXACL;
-       else
-               sb->s_flags &= ~SB_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_logd_secs = args.ar_commit;
-       gt->gt_quota_quantum = args.ar_quota_quantum;
-       if (args.ar_statfs_quantum) {
-               gt->gt_statfs_slow = 0;
-               gt->gt_statfs_quantum = args.ar_statfs_quantum;
-       }
-       else {
-               gt->gt_statfs_slow = 1;
-               gt->gt_statfs_quantum = 30;
-       }
-       spin_unlock(&gt->gt_spin);
-
-       gfs2_online_uevent(sdp);
-       return error;
-}
-
 /**
  * gfs2_drop_inode - Drop an inode (test for remote unlink)
  * @inode: The inode to drop
@@ -1748,7 +1418,6 @@ const struct super_operations gfs2_super_ops = {
        .freeze_super           = gfs2_freeze,
        .thaw_super             = gfs2_unfreeze,
        .statfs                 = gfs2_statfs,
-       .remount_fs             = gfs2_remount_fs,
        .drop_inode             = gfs2_drop_inode,
        .show_options           = gfs2_show_options,
 };