From: Ian Kent <raven@themaw.net>
To: linux-xfs <linux-xfs@vger.kernel.org>
Cc: Dave Chinner <dchinner@redhat.com>,
David Howells <dhowells@redhat.com>,
Al Viro <viro@ZenIV.linux.org.uk>,
Eric Sandeen <sandeen@sandeen.net>
Subject: [PATCH v2 04/15] xfs: mount-api - refactor xfs_parseags()
Date: Fri, 23 Aug 2019 08:59:38 +0800 [thread overview]
Message-ID: <156652197874.2607.4643054966916218220.stgit@fedora-28> (raw)
In-Reply-To: <156652158924.2607.14608448087216437699.stgit@fedora-28>
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.
The only changes are what's needed to communicate the variables
dsunit, dswidth and iosizelog back to xfs_parseags().
Signed-off-by: Ian Kent <raven@themaw.net>
---
fs/xfs/xfs_super.c | 292 ++++++++++++++++++++++++++++------------------------
1 file changed, 156 insertions(+), 136 deletions(-)
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 49c87fb921f1..3ae29938dd89 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -198,6 +198,157 @@ match_kstrtoint(const substring_t *s, unsigned int base, int *res)
return ret;
}
+STATIC int
+xfs_parse_param(
+ int token,
+ char *p,
+ substring_t *args,
+ struct xfs_mount *mp,
+ int *dsunit,
+ int *dswidth,
+ uint8_t *iosizelog)
+{
+ int iosize = 0;
+
+ 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:
+ case Opt_biosize:
+ if (match_kstrtoint(args, 10, &iosize))
+ return -EINVAL;
+ *iosizelog = ffs(iosize) - 1;
+ 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, dsunit))
+ return -EINVAL;
+ break;
+ case Opt_swidth:
+ if (match_int(args, dswidth))
+ 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_COMPAT_IOSIZE;
+ break;
+ case Opt_nolargeio:
+ mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE;
+ 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;
+ }
+
+ return 0;
+}
+
/*
* This function fills in xfs_mount_t fields based on mount args.
* Note: the superblock has _not_ yet been read in.
@@ -219,7 +370,6 @@ xfs_parseargs(
substring_t args[MAX_OPT_ARGS];
int dsunit = 0;
int dswidth = 0;
- int iosize = 0;
uint8_t iosizelog = 0;
/*
@@ -258,146 +408,16 @@ 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:
- case Opt_biosize:
- if (match_kstrtoint(args, 10, &iosize))
- return -EINVAL;
- iosizelog = ffs(iosize) - 1;
- 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, &dsunit))
- return -EINVAL;
- break;
- case Opt_swidth:
- if (match_int(args, &dswidth))
- 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_COMPAT_IOSIZE;
- break;
- case Opt_nolargeio:
- mp->m_flags |= XFS_MOUNT_COMPAT_IOSIZE;
- 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_parse_param(token, p, args, mp,
+ &dsunit, &dswidth, &iosizelog);
+ if (ret)
+ return ret;
}
/*
next prev parent reply other threads:[~2019-08-23 1:08 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-23 0:59 [PATCH v2 00/15] xfs: mount API patch series Ian Kent
2019-08-23 0:59 ` [PATCH v2 01/15] vfs: Create fs_context-aware mount_bdev() replacement Ian Kent
2019-08-23 0:59 ` [PATCH v2 02/15] xfs: mount-api - add fs parameter description Ian Kent
2019-08-27 12:39 ` Brian Foster
2019-08-30 10:31 ` Ian Kent
2019-08-30 11:56 ` Brian Foster
2019-09-17 3:13 ` Ian Kent
2019-09-17 12:10 ` Brian Foster
2019-09-18 3:43 ` Ian Kent
2019-09-18 3:49 ` Ian Kent
2019-08-23 0:59 ` [PATCH v2 03/15] xfs: mount-api - refactor suffix_kstrtoint() Ian Kent
2019-08-27 12:40 ` Brian Foster
2019-08-30 10:33 ` Ian Kent
2019-09-17 4:31 ` Ian Kent
2019-09-17 12:10 ` Brian Foster
2019-08-23 0:59 ` Ian Kent [this message]
2019-08-27 12:40 ` [PATCH v2 04/15] xfs: mount-api - refactor xfs_parseags() Brian Foster
2019-08-23 0:59 ` [PATCH v2 05/15] xfs: mount-api - make xfs_parse_param() take context .parse_param() args Ian Kent
2019-08-26 19:19 ` Eric Sandeen
2019-08-26 19:31 ` Eric Sandeen
2019-08-26 19:32 ` Eric Sandeen
2019-08-30 10:23 ` Ian Kent
2019-08-27 12:41 ` Brian Foster
2019-08-27 15:10 ` Darrick J. Wong
2019-08-27 15:15 ` Eric Sandeen
2019-08-28 0:55 ` Ian Kent
2019-08-30 10:51 ` Ian Kent
2019-08-23 0:59 ` [PATCH v2 06/15] xfs: mount-api - move xfs_parseargs() validation to a helper Ian Kent
2019-08-27 12:41 ` Brian Foster
2019-08-30 10:55 ` Ian Kent
2019-08-23 0:59 ` [PATCH v2 07/15] xfs: mount-api - refactor xfs_fs_fill_super() Ian Kent
2019-08-27 12:42 ` Brian Foster
2019-08-30 10:56 ` Ian Kent
2019-08-23 0:59 ` [PATCH v2 08/15] xfs: mount-api - add xfs_get_tree() Ian Kent
2019-08-28 13:27 ` Brian Foster
2019-08-30 11:01 ` Ian Kent
2019-08-23 1:00 ` [PATCH v2 09/15] xfs: mount-api - add xfs_remount_rw() helper Ian Kent
2019-08-28 13:27 ` Brian Foster
2019-08-23 1:00 ` [PATCH v2 10/15] xfs: mount-api - add xfs_remount_ro() helper Ian Kent
2019-08-28 13:27 ` Brian Foster
2019-08-23 1:00 ` [PATCH v2 11/15] xfs: mount api - add xfs_reconfigure() Ian Kent
2019-08-28 13:28 ` Brian Foster
2019-08-30 11:10 ` Ian Kent
2019-08-30 11:56 ` Brian Foster
2019-09-02 2:41 ` Ian Kent
2019-08-23 1:00 ` [PATCH v2 12/15] xfs: mount-api - add xfs_fc_free() Ian Kent
2019-08-28 13:28 ` Brian Foster
2019-08-30 11:19 ` Ian Kent
2019-08-30 11:20 ` Ian Kent
2019-08-23 1:00 ` [PATCH v2 13/15] xfs: mount-api - dont set sb in xfs_mount_alloc() Ian Kent
2019-08-28 13:28 ` Brian Foster
2019-08-23 1:00 ` [PATCH v2 14/15] xfs: mount-api - switch to new mount-api Ian Kent
2019-08-28 13:29 ` Brian Foster
2019-08-28 13:34 ` Eric Sandeen
2019-08-30 11:30 ` Ian Kent
2019-08-30 11:27 ` Ian Kent
2019-08-23 1:00 ` [PATCH v2 15/15] xfs: mount-api - remove legacy mount functions Ian Kent
2019-08-26 19:33 ` [PATCH v2 00/15] xfs: mount API patch series Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=156652197874.2607.4643054966916218220.stgit@fedora-28 \
--to=raven@themaw.net \
--cc=dchinner@redhat.com \
--cc=dhowells@redhat.com \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@sandeen.net \
--cc=viro@ZenIV.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox