Commit 9a861816 authored by Ian Kent's avatar Ian Kent Committed by Darrick J. Wong
Browse files

xfs: move xfs_parseargs() validation to a helper



Move the validation code of xfs_parseargs() into a helper for later
use within the mount context methods.

Signed-off-by: default avatarIan Kent <raven@themaw.net>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 48a06e1b
Loading
Loading
Loading
Loading
+58 −51
Original line number Diff line number Diff line
@@ -308,59 +308,10 @@ xfs_fc_parse_param(
	return 0;
}

/*
 * This function fills in xfs_mount_t fields based on mount args.
 * Note: the superblock has _not_ yet been read in.
 *
 * Note that this function leaks the various device name allocations on
 * failure.  The caller takes care of them.
 *
 * *sb is const because this is also used to test options on the remount
 * path, and we don't want this to have any side effects at remount time.
 * Today this function does not change *sb, but just to future-proof...
 */
static int
xfs_parseargs(
	struct xfs_mount	*mp,
	char			*options)
xfs_fc_validate_params(
	struct xfs_mount	*mp)
{
	const struct super_block *sb = mp->m_super;
	char			*p;
	substring_t		args[MAX_OPT_ARGS];

	/*
	 * Copy binary VFS mount flags we are interested in.
	 */
	if (sb_rdonly(sb))
		mp->m_flags |= XFS_MOUNT_RDONLY;
	if (sb->s_flags & SB_DIRSYNC)
		mp->m_flags |= XFS_MOUNT_DIRSYNC;
	if (sb->s_flags & SB_SYNCHRONOUS)
		mp->m_flags |= XFS_MOUNT_WSYNC;

	/*
	 * These can be overridden by the mount option parsing.
	 */
	mp->m_logbufs = -1;
	mp->m_logbsize = -1;
	mp->m_allocsize_log = 16; /* 64k */

	if (!options)
		return 0;

	while ((p = strsep(&options, ",")) != NULL) {
		int		token;
		int		ret;

		if (!*p)
			continue;

		token = match_token(p, tokens, args);
		ret = xfs_fc_parse_param(token, p, args, mp);
		if (ret)
			return ret;
	}

	/*
	 * no recovery flag requires a read-only mount
	 */
@@ -425,6 +376,62 @@ xfs_parseargs(
	return 0;
}

/*
 * This function fills in xfs_mount_t fields based on mount args.
 * Note: the superblock has _not_ yet been read in.
 *
 * Note that this function leaks the various device name allocations on
 * failure.  The caller takes care of them.
 *
 * *sb is const because this is also used to test options on the remount
 * path, and we don't want this to have any side effects at remount time.
 * Today this function does not change *sb, but just to future-proof...
 */
static int
xfs_parseargs(
	struct xfs_mount	*mp,
	char			*options)
{
	const struct super_block *sb = mp->m_super;
	char			*p;
	substring_t		args[MAX_OPT_ARGS];

	/*
	 * Copy binary VFS mount flags we are interested in.
	 */
	if (sb_rdonly(sb))
		mp->m_flags |= XFS_MOUNT_RDONLY;
	if (sb->s_flags & SB_DIRSYNC)
		mp->m_flags |= XFS_MOUNT_DIRSYNC;
	if (sb->s_flags & SB_SYNCHRONOUS)
		mp->m_flags |= XFS_MOUNT_WSYNC;

	/*
	 * These can be overridden by the mount option parsing.
	 */
	mp->m_logbufs = -1;
	mp->m_logbsize = -1;
	mp->m_allocsize_log = 16; /* 64k */

	if (!options)
		return 0;

	while ((p = strsep(&options, ",")) != NULL) {
		int		token;
		int		ret;

		if (!*p)
			continue;

		token = match_token(p, tokens, args);
		ret = xfs_fc_parse_param(token, p, args, mp);
		if (ret)
			return ret;
	}

	return xfs_fc_validate_params(mp);
}

struct proc_xfs_info {
	uint64_t	flag;
	char		*str;