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: Ian Kent <raven@themaw.net> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
48a06e1b57
commit
9a861816a0
|
@ -308,59 +308,10 @@ xfs_fc_parse_param(
|
||||||
return 0;
|
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
|
static int
|
||||||
xfs_parseargs(
|
xfs_fc_validate_params(
|
||||||
struct xfs_mount *mp,
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* no recovery flag requires a read-only mount
|
* no recovery flag requires a read-only mount
|
||||||
*/
|
*/
|
||||||
|
@ -425,6 +376,62 @@ xfs_parseargs(
|
||||||
return 0;
|
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 {
|
struct proc_xfs_info {
|
||||||
uint64_t flag;
|
uint64_t flag;
|
||||||
char *str;
|
char *str;
|
||||||
|
|
Loading…
Reference in New Issue