]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
xfs: refactor xfs_parseags()
authorIan Kent <raven@themaw.net>
Mon, 4 Nov 2019 21:58:44 +0000 (13:58 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 5 Nov 2019 16:28:26 +0000 (08:28 -0800)
Refactor xfs_parseags(), move the entire token case block to a separate
function in an attempt to highlight the code that actually changes in
converting to use the new mount api.

Also change the break in the switch to a return in the factored out
xfs_fc_parse_param() function.

Signed-off-by: Ian Kent <raven@themaw.net>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/xfs/xfs_super.c

index 17188a9ed5411b6454ef83132d2a1018eb6e02bd..391c07ca6a3262b8f6b317497bd60569f20debd3 100644 (file)
@@ -160,6 +160,154 @@ match_kstrtoint(
        return ret;
 }
 
+static int
+xfs_fc_parse_param(
+       int                     token,
+       char                    *p,
+       substring_t             *args,
+       struct xfs_mount        *mp)
+{
+       int                     size = 0;
+
+       switch (token) {
+       case Opt_logbufs:
+               if (match_int(args, &mp->m_logbufs))
+                       return -EINVAL;
+               return 0;
+       case Opt_logbsize:
+               if (match_kstrtoint(args, 10, &mp->m_logbsize))
+                       return -EINVAL;
+               return 0;
+       case Opt_logdev:
+               kfree(mp->m_logname);
+               mp->m_logname = match_strdup(args);
+               if (!mp->m_logname)
+                       return -ENOMEM;
+               return 0;
+       case Opt_rtdev:
+               kfree(mp->m_rtname);
+               mp->m_rtname = match_strdup(args);
+               if (!mp->m_rtname)
+                       return -ENOMEM;
+               return 0;
+       case Opt_allocsize:
+               if (match_kstrtoint(args, 10, &size))
+                       return -EINVAL;
+               mp->m_allocsize_log = ffs(size) - 1;
+               mp->m_flags |= XFS_MOUNT_ALLOCSIZE;
+               return 0;
+       case Opt_grpid:
+       case Opt_bsdgroups:
+               mp->m_flags |= XFS_MOUNT_GRPID;
+               return 0;
+       case Opt_nogrpid:
+       case Opt_sysvgroups:
+               mp->m_flags &= ~XFS_MOUNT_GRPID;
+               return 0;
+       case Opt_wsync:
+               mp->m_flags |= XFS_MOUNT_WSYNC;
+               return 0;
+       case Opt_norecovery:
+               mp->m_flags |= XFS_MOUNT_NORECOVERY;
+               return 0;
+       case Opt_noalign:
+               mp->m_flags |= XFS_MOUNT_NOALIGN;
+               return 0;
+       case Opt_swalloc:
+               mp->m_flags |= XFS_MOUNT_SWALLOC;
+               return 0;
+       case Opt_sunit:
+               if (match_int(args, &mp->m_dalign))
+                       return -EINVAL;
+               return 0;
+       case Opt_swidth:
+               if (match_int(args, &mp->m_swidth))
+                       return -EINVAL;
+               return 0;
+       case Opt_inode32:
+               mp->m_flags |= XFS_MOUNT_SMALL_INUMS;
+               return 0;
+       case Opt_inode64:
+               mp->m_flags &= ~XFS_MOUNT_SMALL_INUMS;
+               return 0;
+       case Opt_nouuid:
+               mp->m_flags |= XFS_MOUNT_NOUUID;
+               return 0;
+       case Opt_ikeep:
+               mp->m_flags |= XFS_MOUNT_IKEEP;
+               return 0;
+       case Opt_noikeep:
+               mp->m_flags &= ~XFS_MOUNT_IKEEP;
+               return 0;
+       case Opt_largeio:
+               mp->m_flags |= XFS_MOUNT_LARGEIO;
+               return 0;
+       case Opt_nolargeio:
+               mp->m_flags &= ~XFS_MOUNT_LARGEIO;
+               return 0;
+       case Opt_attr2:
+               mp->m_flags |= XFS_MOUNT_ATTR2;
+               return 0;
+       case Opt_noattr2:
+               mp->m_flags &= ~XFS_MOUNT_ATTR2;
+               mp->m_flags |= XFS_MOUNT_NOATTR2;
+               return 0;
+       case Opt_filestreams:
+               mp->m_flags |= XFS_MOUNT_FILESTREAMS;
+               return 0;
+       case Opt_noquota:
+               mp->m_qflags &= ~XFS_ALL_QUOTA_ACCT;
+               mp->m_qflags &= ~XFS_ALL_QUOTA_ENFD;
+               mp->m_qflags &= ~XFS_ALL_QUOTA_ACTIVE;
+               return 0;
+       case Opt_quota:
+       case Opt_uquota:
+       case Opt_usrquota:
+               mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE |
+                                XFS_UQUOTA_ENFD);
+               return 0;
+       case Opt_qnoenforce:
+       case Opt_uqnoenforce:
+               mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE);
+               mp->m_qflags &= ~XFS_UQUOTA_ENFD;
+               return 0;
+       case Opt_pquota:
+       case Opt_prjquota:
+               mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE |
+                                XFS_PQUOTA_ENFD);
+               return 0;
+       case Opt_pqnoenforce:
+               mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE);
+               mp->m_qflags &= ~XFS_PQUOTA_ENFD;
+               return 0;
+       case Opt_gquota:
+       case Opt_grpquota:
+               mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE |
+                                XFS_GQUOTA_ENFD);
+               return 0;
+       case Opt_gqnoenforce:
+               mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE);
+               mp->m_qflags &= ~XFS_GQUOTA_ENFD;
+               return 0;
+       case Opt_discard:
+               mp->m_flags |= XFS_MOUNT_DISCARD;
+               return 0;
+       case Opt_nodiscard:
+               mp->m_flags &= ~XFS_MOUNT_DISCARD;
+               return 0;
+#ifdef CONFIG_FS_DAX
+       case Opt_dax:
+               mp->m_flags |= XFS_MOUNT_DAX;
+               return 0;
+#endif
+       default:
+               xfs_warn(mp, "unknown mount option [%s].", p);
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 /*
  * This function fills in xfs_mount_t fields based on mount args.
  * Note: the superblock has _not_ yet been read in.
@@ -179,7 +327,6 @@ xfs_parseargs(
        const struct super_block *sb = mp->m_super;
        char                    *p;
        substring_t             args[MAX_OPT_ARGS];
-       int                     size = 0;
 
        /*
         * Copy binary VFS mount flags we are interested in.
@@ -203,146 +350,15 @@ xfs_parseargs(
 
        while ((p = strsep(&options, ",")) != NULL) {
                int             token;
+               int             ret;
 
                if (!*p)
                        continue;
 
                token = match_token(p, tokens, args);
-               switch (token) {
-               case Opt_logbufs:
-                       if (match_int(args, &mp->m_logbufs))
-                               return -EINVAL;
-                       break;
-               case Opt_logbsize:
-                       if (match_kstrtoint(args, 10, &mp->m_logbsize))
-                               return -EINVAL;
-                       break;
-               case Opt_logdev:
-                       kfree(mp->m_logname);
-                       mp->m_logname = match_strdup(args);
-                       if (!mp->m_logname)
-                               return -ENOMEM;
-                       break;
-               case Opt_rtdev:
-                       kfree(mp->m_rtname);
-                       mp->m_rtname = match_strdup(args);
-                       if (!mp->m_rtname)
-                               return -ENOMEM;
-                       break;
-               case Opt_allocsize:
-                       if (match_kstrtoint(args, 10, &size))
-                               return -EINVAL;
-                       mp->m_allocsize_log = ffs(size) - 1;
-                       mp->m_flags |= XFS_MOUNT_ALLOCSIZE;
-                       break;
-               case Opt_grpid:
-               case Opt_bsdgroups:
-                       mp->m_flags |= XFS_MOUNT_GRPID;
-                       break;
-               case Opt_nogrpid:
-               case Opt_sysvgroups:
-                       mp->m_flags &= ~XFS_MOUNT_GRPID;
-                       break;
-               case Opt_wsync:
-                       mp->m_flags |= XFS_MOUNT_WSYNC;
-                       break;
-               case Opt_norecovery:
-                       mp->m_flags |= XFS_MOUNT_NORECOVERY;
-                       break;
-               case Opt_noalign:
-                       mp->m_flags |= XFS_MOUNT_NOALIGN;
-                       break;
-               case Opt_swalloc:
-                       mp->m_flags |= XFS_MOUNT_SWALLOC;
-                       break;
-               case Opt_sunit:
-                       if (match_int(args, &mp->m_dalign))
-                               return -EINVAL;
-                       break;
-               case Opt_swidth:
-                       if (match_int(args, &mp->m_swidth))
-                               return -EINVAL;
-                       break;
-               case Opt_inode32:
-                       mp->m_flags |= XFS_MOUNT_SMALL_INUMS;
-                       break;
-               case Opt_inode64:
-                       mp->m_flags &= ~XFS_MOUNT_SMALL_INUMS;
-                       break;
-               case Opt_nouuid:
-                       mp->m_flags |= XFS_MOUNT_NOUUID;
-                       break;
-               case Opt_ikeep:
-                       mp->m_flags |= XFS_MOUNT_IKEEP;
-                       break;
-               case Opt_noikeep:
-                       mp->m_flags &= ~XFS_MOUNT_IKEEP;
-                       break;
-               case Opt_largeio:
-                       mp->m_flags |= XFS_MOUNT_LARGEIO;
-                       break;
-               case Opt_nolargeio:
-                       mp->m_flags &= ~XFS_MOUNT_LARGEIO;
-                       break;
-               case Opt_attr2:
-                       mp->m_flags |= XFS_MOUNT_ATTR2;
-                       break;
-               case Opt_noattr2:
-                       mp->m_flags &= ~XFS_MOUNT_ATTR2;
-                       mp->m_flags |= XFS_MOUNT_NOATTR2;
-                       break;
-               case Opt_filestreams:
-                       mp->m_flags |= XFS_MOUNT_FILESTREAMS;
-                       break;
-               case Opt_noquota:
-                       mp->m_qflags &= ~XFS_ALL_QUOTA_ACCT;
-                       mp->m_qflags &= ~XFS_ALL_QUOTA_ENFD;
-                       mp->m_qflags &= ~XFS_ALL_QUOTA_ACTIVE;
-                       break;
-               case Opt_quota:
-               case Opt_uquota:
-               case Opt_usrquota:
-                       mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE |
-                                        XFS_UQUOTA_ENFD);
-                       break;
-               case Opt_qnoenforce:
-               case Opt_uqnoenforce:
-                       mp->m_qflags |= (XFS_UQUOTA_ACCT | XFS_UQUOTA_ACTIVE);
-                       mp->m_qflags &= ~XFS_UQUOTA_ENFD;
-                       break;
-               case Opt_pquota:
-               case Opt_prjquota:
-                       mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE |
-                                        XFS_PQUOTA_ENFD);
-                       break;
-               case Opt_pqnoenforce:
-                       mp->m_qflags |= (XFS_PQUOTA_ACCT | XFS_PQUOTA_ACTIVE);
-                       mp->m_qflags &= ~XFS_PQUOTA_ENFD;
-                       break;
-               case Opt_gquota:
-               case Opt_grpquota:
-                       mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE |
-                                        XFS_GQUOTA_ENFD);
-                       break;
-               case Opt_gqnoenforce:
-                       mp->m_qflags |= (XFS_GQUOTA_ACCT | XFS_GQUOTA_ACTIVE);
-                       mp->m_qflags &= ~XFS_GQUOTA_ENFD;
-                       break;
-               case Opt_discard:
-                       mp->m_flags |= XFS_MOUNT_DISCARD;
-                       break;
-               case Opt_nodiscard:
-                       mp->m_flags &= ~XFS_MOUNT_DISCARD;
-                       break;
-#ifdef CONFIG_FS_DAX
-               case Opt_dax:
-                       mp->m_flags |= XFS_MOUNT_DAX;
-                       break;
-#endif
-               default:
-                       xfs_warn(mp, "unknown mount option [%s].", p);
-                       return -EINVAL;
-               }
+               ret = xfs_fc_parse_param(token, p, args, mp);
+               if (ret)
+                       return ret;
        }
 
        /*