On Tue, Sep 24, 2019 at 09:22:38PM +0800, Ian Kent wrote: > Move the validation code of xfs_parseargs() into a helper for later > use within the mount context methods. > > Signed-off-by: Ian Kent <raven@xxxxxxxxxx> > --- > fs/xfs/xfs_super.c | 148 +++++++++++++++++++++++++++++++++------------------- > 1 file changed, 94 insertions(+), 54 deletions(-) > > diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c > index 6792d46fa0be..cfda58dd3822 100644 > --- a/fs/xfs/xfs_super.c > +++ b/fs/xfs/xfs_super.c > @@ -356,6 +356,97 @@ xfs_parse_param( > return 0; > } > > +STATIC int > +xfs_validate_params( > + struct xfs_mount *mp, > + struct xfs_fs_context *ctx, > + bool nooptions) > +{ > + if (nooptions) > + goto noopts; > + > + /* > + * no recovery flag requires a read-only mount > + */ > + if ((mp->m_flags & XFS_MOUNT_NORECOVERY) && > + !(mp->m_flags & XFS_MOUNT_RDONLY)) { > + xfs_warn(mp, "no-recovery mounts must be read-only."); > + return -EINVAL; > + } > + > + if ((mp->m_flags & XFS_MOUNT_NOALIGN) && (ctx->dsunit || ctx->dswidth)) { Long line ^. > + xfs_warn(mp, > + "sunit and swidth options incompatible with the noalign option"); > + return -EINVAL; > + } > + ... > @@ -447,16 +538,7 @@ xfs_parseargs( > ret = xfs_parse_param(&fc, ¶m); > kfree(param.string); > if (ret < 0) > - return ret; > - } > - > - /* > - * no recovery flag requires a read-only mount > - */ > - if ((mp->m_flags & XFS_MOUNT_NORECOVERY) && > - !(mp->m_flags & XFS_MOUNT_RDONLY)) { > - xfs_warn(mp, "no-recovery mounts must be read-only."); > - return -EINVAL; > + goto done; Isn't this supposed to just return the error? Brian > } > > if ((mp->m_flags & XFS_MOUNT_NOALIGN) && > @@ -486,51 +568,9 @@ xfs_parseargs( > } > > done: > - if (ctx->dsunit && !(mp->m_flags & XFS_MOUNT_NOALIGN)) { > - /* > - * At this point the superblock has not been read > - * in, therefore we do not know the block size. > - * Before the mount call ends we will convert > - * these to FSBs. > - */ > - mp->m_dalign = ctx->dsunit; > - mp->m_swidth = ctx->dswidth; > - } > - > - if (mp->m_logbufs != -1 && > - mp->m_logbufs != 0 && > - (mp->m_logbufs < XLOG_MIN_ICLOGS || > - mp->m_logbufs > XLOG_MAX_ICLOGS)) { > - xfs_warn(mp, "invalid logbufs value: %d [not %d-%d]", > - mp->m_logbufs, XLOG_MIN_ICLOGS, XLOG_MAX_ICLOGS); > - return -EINVAL; > - } > - if (mp->m_logbsize != -1 && > - mp->m_logbsize != 0 && > - (mp->m_logbsize < XLOG_MIN_RECORD_BSIZE || > - mp->m_logbsize > XLOG_MAX_RECORD_BSIZE || > - !is_power_of_2(mp->m_logbsize))) { > - xfs_warn(mp, > - "invalid logbufsize: %d [not 16k,32k,64k,128k or 256k]", > - mp->m_logbsize); > - return -EINVAL; > - } > + ret = xfs_validate_params(mp, &context, false); > > - if (ctx->iosizelog) { > - if (ctx->iosizelog > XFS_MAX_IO_LOG || > - ctx->iosizelog < XFS_MIN_IO_LOG) { > - xfs_warn(mp, "invalid log iosize: %d [not %d-%d]", > - ctx->iosizelog, XFS_MIN_IO_LOG, > - XFS_MAX_IO_LOG); > - return -EINVAL; > - } > - > - mp->m_flags |= XFS_MOUNT_DFLT_IOSIZE; > - mp->m_readio_log = ctx->iosizelog; > - mp->m_writeio_log = ctx->iosizelog; > - } > - > - return 0; > + return ret; > } > > struct proc_xfs_info { >