lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Mon, 9 Sep 2019 18:08:39 +0000
From:   "Schumaker, Anna" <Anna.Schumaker@...app.com>
To:     "smayhew@...hat.com" <smayhew@...hat.com>,
        "trond.myklebust@...merspace.com" <trond.myklebust@...merspace.com>
CC:     "linux-nfs@...r.kernel.org" <linux-nfs@...r.kernel.org>,
        "linux-fsdevel@...r.kernel.org" <linux-fsdevel@...r.kernel.org>,
        "viro@...iv.linux.org.uk" <viro@...iv.linux.org.uk>,
        "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
        "dhowells@...hat.com" <dhowells@...hat.com>
Subject: Re: [PATCH v2 18/26] NFS: Rename struct nfs_parsed_mount_data to
 struct nfs_fs_context

Hi Scott,

Thanks for taking these patches up!

On Tue, 2019-09-03 at 16:32 -0400, Scott Mayhew wrote:
> From: David Howells <dhowells@...hat.com>
> 
> Rename struct nfs_parsed_mount_data to struct nfs_fs_context and
> rename
> pointers to it to "ctx".  At some point this will be pointed to by an
> fs_context struct's fs_private pointer.
> 
> Signed-off-by: David Howells <dhowells@...hat.com>
> Signed-off-by: Al Viro <viro@...iv.linux.org.uk>
> ---
>  fs/nfs/client.c     |  66 +++----
>  fs/nfs/fs_context.c | 444 ++++++++++++++++++++++------------------
> ----
>  fs/nfs/internal.h   |  14 +-
>  fs/nfs/nfs4client.c |  60 +++---
>  fs/nfs/nfs4super.c  |   6 +-
>  fs/nfs/super.c      | 194 +++++++++----------
>  6 files changed, 392 insertions(+), 392 deletions(-)
> 
> diff --git a/fs/nfs/client.c b/fs/nfs/client.c
> index 130c065141b3..1afd796a3706 100644
> --- a/fs/nfs/client.c
> +++ b/fs/nfs/client.c
> @@ -648,27 +648,27 @@ EXPORT_SYMBOL_GPL(nfs_init_client);
>   * Create a version 2 or 3 client
>   */
>  static int nfs_init_server(struct nfs_server *server,
> -                          const struct nfs_parsed_mount_data *data,
> +                          const struct nfs_fs_context *cfg,
>                            struct nfs_subversion *nfs_mod)
>  {
>         struct rpc_timeout timeparms;
>         struct nfs_client_initdata cl_init = {
> -               .hostname = data->nfs_server.hostname,
> -               .addr = (const struct sockaddr *)&data-
> >nfs_server.address,
> -               .addrlen = data->nfs_server.addrlen,
> +               .hostname = cfg->nfs_server.hostname,
> +               .addr = (const struct sockaddr *)&cfg-
> >nfs_server.address,
> +               .addrlen = cfg->nfs_server.addrlen,
>                 .nfs_mod = nfs_mod,
> -               .proto = data->nfs_server.protocol,
> -               .net = data->net,
> +               .proto = cfg->nfs_server.protocol,
> +               .net = cfg->net,
>                 .timeparms = &timeparms,
>                 .cred = server->cred,
> -               .nconnect = data->nfs_server.nconnect,
> +               .nconnect = cfg->nfs_server.nconnect,
>         };
>         struct nfs_client *clp;
>         int error;
> 
> -       nfs_init_timeout_values(&timeparms, data-
> >nfs_server.protocol,
> -                       data->timeo, data->retrans);
> -       if (data->flags & NFS_MOUNT_NORESVPORT)
> +       nfs_init_timeout_values(&timeparms, cfg->nfs_server.protocol,
> +                               cfg->timeo, cfg->retrans);
> +       if (cfg->flags & NFS_MOUNT_NORESVPORT)
>                 set_bit(NFS_CS_NORESVPORT, &cl_init.init_flags);
> 
>         /* Allocate or find a client reference we can use */
> @@ -679,46 +679,46 @@ static int nfs_init_server(struct nfs_server
> *server,
>         server->nfs_client = clp;
> 
>         /* Initialise the client representation from the mount data
> */
> -       server->flags = data->flags;
> -       server->options = data->options;
> +       server->flags = cfg->flags;
> +       server->options = cfg->options;
>         server->caps |=
> NFS_CAP_HARDLINKS|NFS_CAP_SYMLINKS|NFS_CAP_FILEID|
>                 NFS_CAP_MODE|NFS_CAP_NLINK|NFS_CAP_OWNER|NFS_CAP_OWNE
> R_GROUP|
>                 NFS_CAP_ATIME|NFS_CAP_CTIME|NFS_CAP_MTIME;
> 
> -       if (data->rsize)
> -               server->rsize = nfs_block_size(data->rsize, NULL);
> -       if (data->wsize)
> -               server->wsize = nfs_block_size(data->wsize, NULL);
> +       if (cfg->rsize)
> +               server->rsize = nfs_block_size(cfg->rsize, NULL);
> +       if (cfg->wsize)
> +               server->wsize = nfs_block_size(cfg->wsize, NULL);
> 
> -       server->acregmin = data->acregmin * HZ;
> -       server->acregmax = data->acregmax * HZ;
> -       server->acdirmin = data->acdirmin * HZ;
> -       server->acdirmax = data->acdirmax * HZ;
> +       server->acregmin = cfg->acregmin * HZ;
> +       server->acregmax = cfg->acregmax * HZ;
> +       server->acdirmin = cfg->acdirmin * HZ;
> +       server->acdirmax = cfg->acdirmax * HZ;
> 
>         /* Start lockd here, before we might error out */
>         error = nfs_start_lockd(server);
>         if (error < 0)
>                 goto error;
> 
> -       server->port = data->nfs_server.port;
> -       server->auth_info = data->auth_info;
> +       server->port = cfg->nfs_server.port;
> +       server->auth_info = cfg->auth_info;
> 
>         error = nfs_init_server_rpcclient(server, &timeparms,
> -                                         data->selected_flavor);
> +                                         cfg->selected_flavor);
>         if (error < 0)
>                 goto error;
> 
>         /* Preserve the values of mount_server-related mount options
> */
> -       if (data->mount_server.addrlen) {
> -               memcpy(&server->mountd_address, &data-
> >mount_server.address,
> -                       data->mount_server.addrlen);
> -               server->mountd_addrlen = data->mount_server.addrlen;
> +       if (cfg->mount_server.addrlen) {
> +               memcpy(&server->mountd_address, &cfg-
> >mount_server.address,
> +                       cfg->mount_server.addrlen);
> +               server->mountd_addrlen = cfg->mount_server.addrlen;
>         }
> -       server->mountd_version = data->mount_server.version;
> -       server->mountd_port = data->mount_server.port;
> -       server->mountd_protocol = data->mount_server.protocol;
> +       server->mountd_version = cfg->mount_server.version;
> +       server->mountd_port = cfg->mount_server.port;
> +       server->mountd_protocol = cfg->mount_server.protocol;
> 
> -       server->namelen  = data->namlen;
> +       server->namelen  = cfg->namlen;
>         return 0;
> 
>  error:
> @@ -959,7 +959,7 @@ struct nfs_server *nfs_create_server(struct
> nfs_mount_info *mount_info)
>                 goto error;
> 
>         /* Get a client representation */
> -       error = nfs_init_server(server, mount_info->parsed, nfs_mod);
> +       error = nfs_init_server(server, mount_info->ctx, nfs_mod);
>         if (error < 0)
>                 goto error;
> 
> @@ -970,7 +970,7 @@ struct nfs_server *nfs_create_server(struct
> nfs_mount_info *mount_info)
>         if (server->nfs_client->rpc_ops->version == 3) {
>                 if (server->namelen == 0 || server->namelen >
> NFS3_MAXNAMLEN)
>                         server->namelen = NFS3_MAXNAMLEN;
> -               if (!(mount_info->parsed->flags &
> NFS_MOUNT_NORDIRPLUS))
> +               if (!(mount_info->ctx->flags & NFS_MOUNT_NORDIRPLUS))
>                         server->caps |= NFS_CAP_READDIRPLUS;
>         } else {
>                 if (server->namelen == 0 || server->namelen >
> NFS2_MAXNAMLEN)
> diff --git a/fs/nfs/fs_context.c b/fs/nfs/fs_context.c
> index 967c684b26d2..ad6f52d0c631 100644
> --- a/fs/nfs/fs_context.c
> +++ b/fs/nfs/fs_context.c
> @@ -246,40 +246,40 @@ static const match_table_t nfs_vers_tokens = {
>         { Opt_vers_err, NULL }
>  };
> 
> -struct nfs_parsed_mount_data *nfs_alloc_parsed_mount_data(void)
> +struct nfs_fs_context *nfs_alloc_parsed_mount_data(void)
>  {
> -       struct nfs_parsed_mount_data *data;
> -
> -       data = kzalloc(sizeof(*data), GFP_KERNEL);
> -       if (data) {
> -               data->timeo             = NFS_UNSPEC_TIMEO;
> -               data->retrans           = NFS_UNSPEC_RETRANS;
> -               data->acregmin          = NFS_DEF_ACREGMIN;
> -               data->acregmax          = NFS_DEF_ACREGMAX;
> -               data->acdirmin          = NFS_DEF_ACDIRMIN;
> -               data->acdirmax          = NFS_DEF_ACDIRMAX;
> -               data->mount_server.port = NFS_UNSPEC_PORT;
> -               data->nfs_server.port   = NFS_UNSPEC_PORT;
> -               data->nfs_server.protocol = XPRT_TRANSPORT_TCP;
> -               data->selected_flavor   = RPC_AUTH_MAXFLAVOR;
> -               data->minorversion      = 0;
> -               data->need_mount        = true;
> -               data->net               = current->nsproxy->net_ns;
> -               data->lsm_opts          = NULL;
> +       struct nfs_fs_context *ctx;
> +
> +       ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
> +       if (ctx) {
> +               ctx->timeo              = NFS_UNSPEC_TIMEO;
> +               ctx->retrans            = NFS_UNSPEC_RETRANS;
> +               ctx->acregmin           = NFS_DEF_ACREGMIN;
> +               ctx->acregmax           = NFS_DEF_ACREGMAX;
> +               ctx->acdirmin           = NFS_DEF_ACDIRMIN;
> +               ctx->acdirmax           = NFS_DEF_ACDIRMAX;
> +               ctx->mount_server.port  = NFS_UNSPEC_PORT;
> +               ctx->nfs_server.port    = NFS_UNSPEC_PORT;
> +               ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP;
> +               ctx->selected_flavor    = RPC_AUTH_MAXFLAVOR;
> +               ctx->minorversion       = 0;
> +               ctx->need_mount = true;
> +               ctx->net                = current->nsproxy->net_ns;
> +               ctx->lsm_opts = NULL;
>         }
> -       return data;
> +       return ctx;
>  }
> 
> -void nfs_free_parsed_mount_data(struct nfs_parsed_mount_data *data)
> +void nfs_free_parsed_mount_data(struct nfs_fs_context *ctx)
>  {
> -       if (data) {
> -               kfree(data->client_address);
> -               kfree(data->mount_server.hostname);
> -               kfree(data->nfs_server.export_path);
> -               kfree(data->nfs_server.hostname);
> -               kfree(data->fscache_uniq);
> -               security_free_mnt_opts(&data->lsm_opts);
> -               kfree(data);
> +       if (ctx) {
> +               kfree(ctx->client_address);
> +               kfree(ctx->mount_server.hostname);
> +               kfree(ctx->nfs_server.export_path);
> +               kfree(ctx->nfs_server.hostname);
> +               kfree(ctx->fscache_uniq);
> +               security_free_mnt_opts(&ctx->lsm_opts);
> +               kfree(ctx);
>         }
>  }
> 
> @@ -310,15 +310,15 @@ static int nfs_verify_server_address(struct
> sockaddr *addr)
>   * Sanity check the NFS transport protocol.
>   *
>   */
> -static void nfs_validate_transport_protocol(struct
> nfs_parsed_mount_data *mnt)
> +static void nfs_validate_transport_protocol(struct nfs_fs_context
> *ctx)
>  {
> -       switch (mnt->nfs_server.protocol) {
> +       switch (ctx->nfs_server.protocol) {
>         case XPRT_TRANSPORT_UDP:
>         case XPRT_TRANSPORT_TCP:
>         case XPRT_TRANSPORT_RDMA:
>                 break;
>         default:
> -               mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
> +               ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP;
>         }
>  }
> 
> @@ -326,20 +326,20 @@ static void
> nfs_validate_transport_protocol(struct nfs_parsed_mount_data *mnt)
>   * For text based NFSv2/v3 mounts, the mount protocol transport
> default
>   * settings should depend upon the specified NFS transport.
>   */
> -static void nfs_set_mount_transport_protocol(struct
> nfs_parsed_mount_data *mnt)
> +static void nfs_set_mount_transport_protocol(struct nfs_fs_context
> *ctx)
>  {
> -       nfs_validate_transport_protocol(mnt);
> +       nfs_validate_transport_protocol(ctx);
> 
> -       if (mnt->mount_server.protocol == XPRT_TRANSPORT_UDP ||
> -           mnt->mount_server.protocol == XPRT_TRANSPORT_TCP)
> +       if (ctx->mount_server.protocol == XPRT_TRANSPORT_UDP ||
> +           ctx->mount_server.protocol == XPRT_TRANSPORT_TCP)
>                         return;
> -       switch (mnt->nfs_server.protocol) {
> +       switch (ctx->nfs_server.protocol) {
>         case XPRT_TRANSPORT_UDP:
> -               mnt->mount_server.protocol = XPRT_TRANSPORT_UDP;
> +               ctx->mount_server.protocol = XPRT_TRANSPORT_UDP;
>                 break;
>         case XPRT_TRANSPORT_TCP:
>         case XPRT_TRANSPORT_RDMA:
> -               mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;
> +               ctx->mount_server.protocol = XPRT_TRANSPORT_TCP;
>         }
>  }
> 
> @@ -371,8 +371,7 @@ static bool nfs_auth_info_add(struct
> nfs_auth_info *auth_info,
>  /*
>   * Parse the value of the 'sec=' option.
>   */
> -static int nfs_parse_security_flavors(char *value,
> -                                     struct nfs_parsed_mount_data
> *mnt)
> +static int nfs_parse_security_flavors(char *value, struct
> nfs_fs_context *ctx)
>  {
>         substring_t args[MAX_OPT_ARGS];
>         rpc_authflavor_t pseudoflavor;
> @@ -421,7 +420,7 @@ static int nfs_parse_security_flavors(char
> *value,
>                         return 0;
>                 }
> 
> -               if (!nfs_auth_info_add(&mnt->auth_info,
> pseudoflavor))
> +               if (!nfs_auth_info_add(&ctx->auth_info,
> pseudoflavor))
>                         return 0;
>         }
> 
> @@ -429,36 +428,36 @@ static int nfs_parse_security_flavors(char
> *value,
>  }
> 
>  static int nfs_parse_version_string(char *string,
> -               struct nfs_parsed_mount_data *mnt,
> +               struct nfs_fs_context *ctx,
>                 substring_t *args)
>  {
> -       mnt->flags &= ~NFS_MOUNT_VER3;
> +       ctx->flags &= ~NFS_MOUNT_VER3;
>         switch (match_token(string, nfs_vers_tokens, args)) {
>         case Opt_vers_2:
> -               mnt->version = 2;
> +               ctx->version = 2;
>                 break;
>         case Opt_vers_3:
> -               mnt->flags |= NFS_MOUNT_VER3;
> -               mnt->version = 3;
> +               ctx->flags |= NFS_MOUNT_VER3;
> +               ctx->version = 3;
>                 break;
>         case Opt_vers_4:
>                 /* Backward compatibility option. In future,
>                  * the mount program should always supply
>                  * a NFSv4 minor version number.
>                  */
> -               mnt->version = 4;
> +               ctx->version = 4;
>                 break;
>         case Opt_vers_4_0:
> -               mnt->version = 4;
> -               mnt->minorversion = 0;
> +               ctx->version = 4;
> +               ctx->minorversion = 0;
>                 break;
>         case Opt_vers_4_1:
> -               mnt->version = 4;
> -               mnt->minorversion = 1;
> +               ctx->version = 4;
> +               ctx->minorversion = 1;
>                 break;
>         case Opt_vers_4_2:
> -               mnt->version = 4;
> -               mnt->minorversion = 2;
> +               ctx->version = 4;
> +               ctx->minorversion = 2;
>                 break;
>         default:
>                 return 0;
> @@ -506,7 +505,7 @@ static int nfs_get_option_ul_bound(substring_t
> args[], unsigned long *option,
>   * skipped as they are encountered.  If there were no errors, return
> 1;
>   * otherwise return 0 (zero).
>   */
> -int nfs_parse_mount_options(char *raw, struct nfs_parsed_mount_data
> *mnt)
> +int nfs_parse_mount_options(char *raw, struct nfs_fs_context *ctx)
>  {
>         char *p, *string;
>         int rc, sloppy = 0, invalid_option = 0;
> @@ -519,7 +518,7 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>         }
>         dfprintk(MOUNT, "NFS: nfs mount opts='%s'\n", raw);
> 
> -       rc = security_sb_eat_lsm_opts(raw, &mnt->lsm_opts);
> +       rc = security_sb_eat_lsm_opts(raw, &ctx->lsm_opts);
>         if (rc)
>                 goto out_security_failure;
> 
> @@ -540,96 +539,96 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>                  * boolean options:  foo/nofoo
>                  */
>                 case Opt_soft:
> -                       mnt->flags |= NFS_MOUNT_SOFT;
> -                       mnt->flags &= ~NFS_MOUNT_SOFTERR;
> +                       ctx->flags |= NFS_MOUNT_SOFT;
> +                       ctx->flags &= ~NFS_MOUNT_SOFTERR;
>                         break;
>                 case Opt_softerr:
> -                       mnt->flags |= NFS_MOUNT_SOFTERR;
> -                       mnt->flags &= ~NFS_MOUNT_SOFT;
> +                       ctx->flags |= NFS_MOUNT_SOFTERR;
> +                       ctx->flags &= ~NFS_MOUNT_SOFT;
>                         break;
>                 case Opt_hard:
> -                       mnt->flags &=
> ~(NFS_MOUNT_SOFT|NFS_MOUNT_SOFTERR);
> +                       ctx->flags &=
> ~(NFS_MOUNT_SOFT|NFS_MOUNT_SOFTERR);
>                         break;
>                 case Opt_posix:
> -                       mnt->flags |= NFS_MOUNT_POSIX;
> +                       ctx->flags |= NFS_MOUNT_POSIX;
>                         break;
>                 case Opt_noposix:
> -                       mnt->flags &= ~NFS_MOUNT_POSIX;
> +                       ctx->flags &= ~NFS_MOUNT_POSIX;
>                         break;
>                 case Opt_cto:
> -                       mnt->flags &= ~NFS_MOUNT_NOCTO;
> +                       ctx->flags &= ~NFS_MOUNT_NOCTO;
>                         break;
>                 case Opt_nocto:
> -                       mnt->flags |= NFS_MOUNT_NOCTO;
> +                       ctx->flags |= NFS_MOUNT_NOCTO;
>                         break;
>                 case Opt_ac:
> -                       mnt->flags &= ~NFS_MOUNT_NOAC;
> +                       ctx->flags &= ~NFS_MOUNT_NOAC;
>                         break;
>                 case Opt_noac:
> -                       mnt->flags |= NFS_MOUNT_NOAC;
> +                       ctx->flags |= NFS_MOUNT_NOAC;
>                         break;
>                 case Opt_lock:
> -                       mnt->flags &= ~NFS_MOUNT_NONLM;
> -                       mnt->flags &= ~(NFS_MOUNT_LOCAL_FLOCK |
> +                       ctx->flags &= ~NFS_MOUNT_NONLM;
> +                       ctx->flags &= ~(NFS_MOUNT_LOCAL_FLOCK |
>                                         NFS_MOUNT_LOCAL_FCNTL);
>                         break;
>                 case Opt_nolock:
> -                       mnt->flags |= NFS_MOUNT_NONLM;
> -                       mnt->flags |= (NFS_MOUNT_LOCAL_FLOCK |
> +                       ctx->flags |= NFS_MOUNT_NONLM;
> +                       ctx->flags |= (NFS_MOUNT_LOCAL_FLOCK |
>                                        NFS_MOUNT_LOCAL_FCNTL);
>                         break;
>                 case Opt_udp:
> -                       mnt->flags &= ~NFS_MOUNT_TCP;
> -                       mnt->nfs_server.protocol =
> XPRT_TRANSPORT_UDP;
> +                       ctx->flags &= ~NFS_MOUNT_TCP;
> +                       ctx->nfs_server.protocol =
> XPRT_TRANSPORT_UDP;
>                         break;
>                 case Opt_tcp:
> -                       mnt->flags |= NFS_MOUNT_TCP;
> -                       mnt->nfs_server.protocol =
> XPRT_TRANSPORT_TCP;
> +                       ctx->flags |= NFS_MOUNT_TCP;
> +                       ctx->nfs_server.protocol =
> XPRT_TRANSPORT_TCP;
>                         break;
>                 case Opt_rdma:
> -                       mnt->flags |= NFS_MOUNT_TCP; /* for side
> protocols */
> -                       mnt->nfs_server.protocol =
> XPRT_TRANSPORT_RDMA;
> +                       ctx->flags |= NFS_MOUNT_TCP; /* for side
> protocols */
> +                       ctx->nfs_server.protocol =
> XPRT_TRANSPORT_RDMA;
>                         xprt_load_transport(p);
>                         break;
>                 case Opt_acl:
> -                       mnt->flags &= ~NFS_MOUNT_NOACL;
> +                       ctx->flags &= ~NFS_MOUNT_NOACL;
>                         break;
>                 case Opt_noacl:
> -                       mnt->flags |= NFS_MOUNT_NOACL;
> +                       ctx->flags |= NFS_MOUNT_NOACL;
>                         break;
>                 case Opt_rdirplus:
> -                       mnt->flags &= ~NFS_MOUNT_NORDIRPLUS;
> +                       ctx->flags &= ~NFS_MOUNT_NORDIRPLUS;
>                         break;
>                 case Opt_nordirplus:
> -                       mnt->flags |= NFS_MOUNT_NORDIRPLUS;
> +                       ctx->flags |= NFS_MOUNT_NORDIRPLUS;
>                         break;
>                 case Opt_sharecache:
> -                       mnt->flags &= ~NFS_MOUNT_UNSHARED;
> +                       ctx->flags &= ~NFS_MOUNT_UNSHARED;
>                         break;
>                 case Opt_nosharecache:
> -                       mnt->flags |= NFS_MOUNT_UNSHARED;
> +                       ctx->flags |= NFS_MOUNT_UNSHARED;
>                         break;
>                 case Opt_resvport:
> -                       mnt->flags &= ~NFS_MOUNT_NORESVPORT;
> +                       ctx->flags &= ~NFS_MOUNT_NORESVPORT;
>                         break;
>                 case Opt_noresvport:
> -                       mnt->flags |= NFS_MOUNT_NORESVPORT;
> +                       ctx->flags |= NFS_MOUNT_NORESVPORT;
>                         break;
>                 case Opt_fscache:
> -                       mnt->options |= NFS_OPTION_FSCACHE;
> -                       kfree(mnt->fscache_uniq);
> -                       mnt->fscache_uniq = NULL;
> +                       ctx->options |= NFS_OPTION_FSCACHE;
> +                       kfree(ctx->fscache_uniq);
> +                       ctx->fscache_uniq = NULL;
>                         break;
>                 case Opt_nofscache:
> -                       mnt->options &= ~NFS_OPTION_FSCACHE;
> -                       kfree(mnt->fscache_uniq);
> -                       mnt->fscache_uniq = NULL;
> +                       ctx->options &= ~NFS_OPTION_FSCACHE;
> +                       kfree(ctx->fscache_uniq);
> +                       ctx->fscache_uniq = NULL;
>                         break;
>                 case Opt_migration:
> -                       mnt->options |= NFS_OPTION_MIGRATION;
> +                       ctx->options |= NFS_OPTION_MIGRATION;
>                         break;
>                 case Opt_nomigration:
> -                       mnt->options &= ~NFS_OPTION_MIGRATION;
> +                       ctx->options &= ~NFS_OPTION_MIGRATION;
>                         break;
> 
>                 /*
> @@ -639,83 +638,83 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>                         if (nfs_get_option_ul(args, &option) ||
>                             option > USHRT_MAX)
>                                 goto out_invalid_value;
> -                       mnt->nfs_server.port = option;
> +                       ctx->nfs_server.port = option;
>                         break;
>                 case Opt_rsize:
>                         if (nfs_get_option_ul(args, &option))
>                                 goto out_invalid_value;
> -                       mnt->rsize = option;
> +                       ctx->rsize = option;
>                         break;
>                 case Opt_wsize:
>                         if (nfs_get_option_ul(args, &option))
>                                 goto out_invalid_value;
> -                       mnt->wsize = option;
> +                       ctx->wsize = option;
>                         break;
>                 case Opt_bsize:
>                         if (nfs_get_option_ul(args, &option))
>                                 goto out_invalid_value;
> -                       mnt->bsize = option;
> +                       ctx->bsize = option;
>                         break;
>                 case Opt_timeo:
>                         if (nfs_get_option_ul_bound(args, &option, 1,
> INT_MAX))
>                                 goto out_invalid_value;
> -                       mnt->timeo = option;
> +                       ctx->timeo = option;
>                         break;
>                 case Opt_retrans:
>                         if (nfs_get_option_ul_bound(args, &option, 0,
> INT_MAX))
>                                 goto out_invalid_value;
> -                       mnt->retrans = option;
> +                       ctx->retrans = option;
>                         break;
>                 case Opt_acregmin:
>                         if (nfs_get_option_ul(args, &option))
>                                 goto out_invalid_value;
> -                       mnt->acregmin = option;
> +                       ctx->acregmin = option;
>                         break;
>                 case Opt_acregmax:
>                         if (nfs_get_option_ul(args, &option))
>                                 goto out_invalid_value;
> -                       mnt->acregmax = option;
> +                       ctx->acregmax = option;
>                         break;
>                 case Opt_acdirmin:
>                         if (nfs_get_option_ul(args, &option))
>                                 goto out_invalid_value;
> -                       mnt->acdirmin = option;
> +                       ctx->acdirmin = option;
>                         break;
>                 case Opt_acdirmax:
>                         if (nfs_get_option_ul(args, &option))
>                                 goto out_invalid_value;
> -                       mnt->acdirmax = option;
> +                       ctx->acdirmax = option;
>                         break;
>                 case Opt_actimeo:
>                         if (nfs_get_option_ul(args, &option))
>                                 goto out_invalid_value;
> -                       mnt->acregmin = mnt->acregmax =
> -                       mnt->acdirmin = mnt->acdirmax = option;
> +                       ctx->acregmin = ctx->acregmax =
> +                       ctx->acdirmin = ctx->acdirmax = option;
>                         break;
>                 case Opt_namelen:
>                         if (nfs_get_option_ul(args, &option))
>                                 goto out_invalid_value;
> -                       mnt->namlen = option;
> +                       ctx->namlen = option;
>                         break;
>                 case Opt_mountport:
>                         if (nfs_get_option_ul(args, &option) ||
>                             option > USHRT_MAX)
>                                 goto out_invalid_value;
> -                       mnt->mount_server.port = option;
> +                       ctx->mount_server.port = option;
>                         break;
>                 case Opt_mountvers:
>                         if (nfs_get_option_ul(args, &option) ||
>                             option < NFS_MNT_VERSION ||
>                             option > NFS_MNT3_VERSION)
>                                 goto out_invalid_value;
> -                       mnt->mount_server.version = option;
> +                       ctx->mount_server.version = option;
>                         break;
>                 case Opt_minorversion:
>                         if (nfs_get_option_ul(args, &option))
>                                 goto out_invalid_value;
>                         if (option > NFS4_MAX_MINOR_VERSION)
>                                 goto out_invalid_value;
> -                       mnt->minorversion = option;
> +                       ctx->minorversion = option;
>                         break;
> 
>                 /*
> @@ -725,7 +724,7 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>                         string = match_strdup(args);
>                         if (string == NULL)
>                                 goto out_nomem;
> -                       rc = nfs_parse_version_string(string, mnt,
> args);
> +                       rc = nfs_parse_version_string(string, ctx,
> args);
>                         kfree(string);
>                         if (!rc)
>                                 goto out_invalid_value;
> @@ -734,7 +733,7 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>                         string = match_strdup(args);
>                         if (string == NULL)
>                                 goto out_nomem;
> -                       rc = nfs_parse_security_flavors(string, mnt);
> +                       rc = nfs_parse_security_flavors(string, ctx);
>                         kfree(string);
>                         if (!rc) {
>                                 dfprintk(MOUNT, "NFS:   unrecognized
> "
> @@ -755,23 +754,23 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>                                 protofamily = AF_INET6;
>                                 /* fall through */
>                         case Opt_xprt_udp:
> -                               mnt->flags &= ~NFS_MOUNT_TCP;
> -                               mnt->nfs_server.protocol =
> XPRT_TRANSPORT_UDP;
> +                               ctx->flags &= ~NFS_MOUNT_TCP;
> +                               ctx->nfs_server.protocol =
> XPRT_TRANSPORT_UDP;
>                                 break;
>                         case Opt_xprt_tcp6:
>                                 protofamily = AF_INET6;
>                                 /* fall through */
>                         case Opt_xprt_tcp:
> -                               mnt->flags |= NFS_MOUNT_TCP;
> -                               mnt->nfs_server.protocol =
> XPRT_TRANSPORT_TCP;
> +                               ctx->flags |= NFS_MOUNT_TCP;
> +                               ctx->nfs_server.protocol =
> XPRT_TRANSPORT_TCP;
>                                 break;
>                         case Opt_xprt_rdma6:
>                                 protofamily = AF_INET6;
>                                 /* fall through */
>                         case Opt_xprt_rdma:
>                                 /* vector side protocols to TCP */
> -                               mnt->flags |= NFS_MOUNT_TCP;
> -                               mnt->nfs_server.protocol =
> XPRT_TRANSPORT_RDMA;
> +                               ctx->flags |= NFS_MOUNT_TCP;
> +                               ctx->nfs_server.protocol =
> XPRT_TRANSPORT_RDMA;
>                                 xprt_load_transport(string);
>                                 break;
>                         default:
> @@ -796,13 +795,13 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>                                 mountfamily = AF_INET6;
>                                 /* fall through */
>                         case Opt_xprt_udp:
> -                               mnt->mount_server.protocol =
> XPRT_TRANSPORT_UDP;
> +                               ctx->mount_server.protocol =
> XPRT_TRANSPORT_UDP;
>                                 break;
>                         case Opt_xprt_tcp6:
>                                 mountfamily = AF_INET6;
>                                 /* fall through */
>                         case Opt_xprt_tcp:
> -                               mnt->mount_server.protocol =
> XPRT_TRANSPORT_TCP;
> +                               ctx->mount_server.protocol =
> XPRT_TRANSPORT_TCP;
>                                 break;
>                         case Opt_xprt_rdma: /* not used for side
> protocols */
>                         default:
> @@ -815,35 +814,35 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>                         string = match_strdup(args);
>                         if (string == NULL)
>                                 goto out_nomem;
> -                       mnt->nfs_server.addrlen =
> -                               rpc_pton(mnt->net, string,
> strlen(string),
> +                       ctx->nfs_server.addrlen =
> +                               rpc_pton(ctx->net, string,
> strlen(string),
>                                         (struct sockaddr *)
> -                                       &mnt->nfs_server.address,
> -                                       sizeof(mnt-
> >nfs_server.address));
> +                                       &ctx->nfs_server.address,
> +                                       sizeof(ctx-
> >nfs_server.address));
>                         kfree(string);
> -                       if (mnt->nfs_server.addrlen == 0)
> +                       if (ctx->nfs_server.addrlen == 0)
>                                 goto out_invalid_address;
>                         break;
>                 case Opt_clientaddr:
> -                       if (nfs_get_option_str(args, &mnt-
> >client_address))
> +                       if (nfs_get_option_str(args, &ctx-
> >client_address))
>                                 goto out_nomem;
>                         break;
>                 case Opt_mounthost:
>                         if (nfs_get_option_str(args,
> -                                              &mnt-
> >mount_server.hostname))
> +                                              &ctx-
> >mount_server.hostname))
>                                 goto out_nomem;
>                         break;
>                 case Opt_mountaddr:
>                         string = match_strdup(args);
>                         if (string == NULL)
>                                 goto out_nomem;
> -                       mnt->mount_server.addrlen =
> -                               rpc_pton(mnt->net, string,
> strlen(string),
> +                       ctx->mount_server.addrlen =
> +                               rpc_pton(ctx->net, string,
> strlen(string),
>                                         (struct sockaddr *)
> -                                       &mnt->mount_server.address,
> -                                       sizeof(mnt-
> >mount_server.address));
> +                                       &ctx->mount_server.address,
> +                                       sizeof(ctx-
> >mount_server.address));
>                         kfree(string);
> -                       if (mnt->mount_server.addrlen == 0)
> +                       if (ctx->mount_server.addrlen == 0)
>                                 goto out_invalid_address;
>                         break;
>                 case Opt_nconnect:

Opt_nconnect needs this conversion, too:

fs/nfs/fs_context.c: In function ‘nfs_fs_context_parse_option’:
fs/nfs/fs_context.c:833:4: error: ‘mnt’ undeclared (first use in this
function); did you mean ‘int’?
  833 |    mnt->nfs_server.nconnect = option;
      |    ^~~
      |    int

Anna
> @@ -860,14 +859,14 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>                         kfree(string);
>                         switch (token) {
>                                 case Opt_lookupcache_all:
> -                                       mnt->flags &=
> ~(NFS_MOUNT_LOOKUP_CACHE_NONEG|NFS_MOUNT_LOOKUP_CACHE_NONE);
> +                                       ctx->flags &=
> ~(NFS_MOUNT_LOOKUP_CACHE_NONEG|NFS_MOUNT_LOOKUP_CACHE_NONE);
>                                         break;
>                                 case Opt_lookupcache_positive:
> -                                       mnt->flags &=
> ~NFS_MOUNT_LOOKUP_CACHE_NONE;
> -                                       mnt->flags |=
> NFS_MOUNT_LOOKUP_CACHE_NONEG;
> +                                       ctx->flags &=
> ~NFS_MOUNT_LOOKUP_CACHE_NONE;
> +                                       ctx->flags |=
> NFS_MOUNT_LOOKUP_CACHE_NONEG;
>                                         break;
>                                 case Opt_lookupcache_none:
> -                                       mnt->flags |=
> NFS_MOUNT_LOOKUP_CACHE_NONEG|NFS_MOUNT_LOOKUP_CACHE_NONE;
> +                                       ctx->flags |=
> NFS_MOUNT_LOOKUP_CACHE_NONEG|NFS_MOUNT_LOOKUP_CACHE_NONE;
>                                         break;
>                                 default:
>                                         dfprintk(MOUNT,
> "NFS:   invalid "
> @@ -876,9 +875,9 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>                         };
>                         break;
>                 case Opt_fscache_uniq:
> -                       if (nfs_get_option_str(args, &mnt-
> >fscache_uniq))
> +                       if (nfs_get_option_str(args, &ctx-
> >fscache_uniq))
>                                 goto out_nomem;
> -                       mnt->options |= NFS_OPTION_FSCACHE;
> +                       ctx->options |= NFS_OPTION_FSCACHE;
>                         break;
>                 case Opt_local_lock:
>                         string = match_strdup(args);
> @@ -889,17 +888,17 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>                         kfree(string);
>                         switch (token) {
>                         case Opt_local_lock_all:
> -                               mnt->flags |= (NFS_MOUNT_LOCAL_FLOCK
> |
> +                               ctx->flags |= (NFS_MOUNT_LOCAL_FLOCK
> |
>                                                NFS_MOUNT_LOCAL_FCNTL)
> ;
>                                 break;
>                         case Opt_local_lock_flock:
> -                               mnt->flags |= NFS_MOUNT_LOCAL_FLOCK;
> +                               ctx->flags |= NFS_MOUNT_LOCAL_FLOCK;
>                                 break;
>                         case Opt_local_lock_posix:
> -                               mnt->flags |= NFS_MOUNT_LOCAL_FCNTL;
> +                               ctx->flags |= NFS_MOUNT_LOCAL_FCNTL;
>                                 break;
>                         case Opt_local_lock_none:
> -                               mnt->flags &= ~(NFS_MOUNT_LOCAL_FLOCK
> |
> +                               ctx->flags &= ~(NFS_MOUNT_LOCAL_FLOCK
> |
>                                                 NFS_MOUNT_LOCAL_FCNTL
> );
>                                 break;
>                         default:
> @@ -932,11 +931,11 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>         if (!sloppy && invalid_option)
>                 return 0;
> 
> -       if (mnt->minorversion && mnt->version != 4)
> +       if (ctx->minorversion && ctx->version != 4)
>                 goto out_minorversion_mismatch;
> 
> -       if (mnt->options & NFS_OPTION_MIGRATION &&
> -           (mnt->version != 4 || mnt->minorversion != 0))
> +       if (ctx->options & NFS_OPTION_MIGRATION &&
> +           (ctx->version != 4 || ctx->minorversion != 0))
>                 goto out_migration_misuse;
> 
>         /*
> @@ -944,15 +943,15 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>          * families in the addr=/mountaddr= options.
>          */
>         if (protofamily != AF_UNSPEC &&
> -           protofamily != mnt->nfs_server.address.ss_family)
> +           protofamily != ctx->nfs_server.address.ss_family)
>                 goto out_proto_mismatch;
> 
>         if (mountfamily != AF_UNSPEC) {
> -               if (mnt->mount_server.addrlen) {
> -                       if (mountfamily != mnt-
> >mount_server.address.ss_family)
> +               if (ctx->mount_server.addrlen) {
> +                       if (mountfamily != ctx-
> >mount_server.address.ss_family)
>                                 goto out_mountproto_mismatch;
>                 } else {
> -                       if (mountfamily != mnt-
> >nfs_server.address.ss_family)
> +                       if (mountfamily != ctx-
> >nfs_server.address.ss_family)
>                                 goto out_mountproto_mismatch;
>                 }
>         }
> @@ -974,7 +973,7 @@ int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt)
>         return 0;
>  out_minorversion_mismatch:
>         printk(KERN_INFO "NFS: mount option vers=%u does not support
> "
> -                        "minorversion=%u\n", mnt->version, mnt-
> >minorversion);
> +                        "minorversion=%u\n", ctx->version, ctx-
> >minorversion);
>         return 0;
>  out_migration_misuse:
>         printk(KERN_INFO
> @@ -1082,18 +1081,18 @@ static int nfs_parse_devname(const char
> *dev_name,
>   *   mountproto=tcp after mountproto=udp, and so on
>   */
>  static int nfs23_validate_mount_data(void *options,
> -                                    struct nfs_parsed_mount_data
> *args,
> +                                    struct nfs_fs_context *ctx,
>                                      struct nfs_fh *mntfh,
>                                      const char *dev_name)
>  {
>         struct nfs_mount_data *data = (struct nfs_mount_data
> *)options;
> -       struct sockaddr *sap = (struct sockaddr *)&args-
> >nfs_server.address;
> +       struct sockaddr *sap = (struct sockaddr *)&ctx-
> >nfs_server.address;
>         int extra_flags = NFS_MOUNT_LEGACY_INTERFACE;
> 
>         if (data == NULL)
>                 goto out_no_data;
> 
> -       args->version = NFS_DEFAULT_VERSION;
> +       ctx->version = NFS_DEFAULT_VERSION;
>         switch (data->version) {
>         case 1:
>                 data->namlen = 0; /* fall through */
> @@ -1119,10 +1118,10 @@ static int nfs23_validate_mount_data(void
> *options,
>                         if (data->root.size > NFS3_FHSIZE || data-
> >root.size == 0)
>                                 goto out_invalid_fh;
>                         mntfh->size = data->root.size;
> -                       args->version = 3;
> +                       ctx->version = 3;
>                 } else {
>                         mntfh->size = NFS2_FHSIZE;
> -                       args->version = 2;
> +                       ctx->version = 2;
>                 }
> 
> 
> @@ -1132,47 +1131,47 @@ static int nfs23_validate_mount_data(void
> *options,
>                                sizeof(mntfh->data) - mntfh->size);
> 
>                 /*
> -                * Translate to nfs_parsed_mount_data, which
> nfs_fill_super
> +                * Translate to nfs_fs_context, which nfs_fill_super
>                  * can deal with.
>                  */
> -               args->flags             = data->flags &
> NFS_MOUNT_FLAGMASK;
> -               args->flags             |= extra_flags;
> -               args->rsize             = data->rsize;
> -               args->wsize             = data->wsize;
> -               args->timeo             = data->timeo;
> -               args->retrans           = data->retrans;
> -               args->acregmin          = data->acregmin;
> -               args->acregmax          = data->acregmax;
> -               args->acdirmin          = data->acdirmin;
> -               args->acdirmax          = data->acdirmax;
> -               args->need_mount        = false;
> +               ctx->flags      = data->flags & NFS_MOUNT_FLAGMASK;
> +               ctx->flags      |= extra_flags;
> +               ctx->rsize      = data->rsize;
> +               ctx->wsize      = data->wsize;
> +               ctx->timeo      = data->timeo;
> +               ctx->retrans    = data->retrans;
> +               ctx->acregmin   = data->acregmin;
> +               ctx->acregmax   = data->acregmax;
> +               ctx->acdirmin   = data->acdirmin;
> +               ctx->acdirmax   = data->acdirmax;
> +               ctx->need_mount = false;
> 
>                 memcpy(sap, &data->addr, sizeof(data->addr));
> -               args->nfs_server.addrlen = sizeof(data->addr);
> -               args->nfs_server.port = ntohs(data->addr.sin_port);
> +               ctx->nfs_server.addrlen = sizeof(data->addr);
> +               ctx->nfs_server.port = ntohs(data->addr.sin_port);
>                 if (sap->sa_family != AF_INET ||
>                     !nfs_verify_server_address(sap))
>                         goto out_no_address;
> 
>                 if (!(data->flags & NFS_MOUNT_TCP))
> -                       args->nfs_server.protocol =
> XPRT_TRANSPORT_UDP;
> +                       ctx->nfs_server.protocol =
> XPRT_TRANSPORT_UDP;
>                 /* N.B. caller will free nfs_server.hostname in all
> cases */
> -               args->nfs_server.hostname = kstrdup(data->hostname,
> GFP_KERNEL);
> -               args->namlen            = data->namlen;
> -               args->bsize             = data->bsize;
> +               ctx->nfs_server.hostname = kstrdup(data->hostname,
> GFP_KERNEL);
> +               ctx->namlen             = data->namlen;
> +               ctx->bsize              = data->bsize;
> 
>                 if (data->flags & NFS_MOUNT_SECFLAVOUR)
> -                       args->selected_flavor = data->pseudoflavor;
> +                       ctx->selected_flavor = data->pseudoflavor;
>                 else
> -                       args->selected_flavor = RPC_AUTH_UNIX;
> -               if (!args->nfs_server.hostname)
> +                       ctx->selected_flavor = RPC_AUTH_UNIX;
> +               if (!ctx->nfs_server.hostname)
>                         goto out_nomem;
> 
>                 if (!(data->flags & NFS_MOUNT_NONLM))
> -                       args->flags &= ~(NFS_MOUNT_LOCAL_FLOCK|
> +                       ctx->flags &= ~(NFS_MOUNT_LOCAL_FLOCK|
>                                          NFS_MOUNT_LOCAL_FCNTL);
>                 else
> -                       args->flags |= (NFS_MOUNT_LOCAL_FLOCK|
> +                       ctx->flags |= (NFS_MOUNT_LOCAL_FLOCK|
>                                         NFS_MOUNT_LOCAL_FCNTL);
>                 /*
>                  * The legacy version 6 binary mount data from
> userspace has a
> @@ -1187,7 +1186,7 @@ static int nfs23_validate_mount_data(void
> *options,
>                         int rc;
>                         data->context[NFS_MAX_CONTEXT_LEN] = '\0';
>                         rc = security_add_mnt_opt("context", data-
> >context,
> -                                       strlen(data->context), &args-
> >lsm_opts);
> +                                       strlen(data->context), ctx-
> >lsm_opts);
>                         if (rc)
>                                 return rc;
>  #else
> @@ -1229,10 +1228,9 @@ static int nfs23_validate_mount_data(void
> *options,
>  }
> 
>  #if IS_ENABLED(CONFIG_NFS_V4)
> -
> -static void nfs4_validate_mount_flags(struct nfs_parsed_mount_data
> *args)
> +static void nfs4_validate_mount_flags(struct nfs_fs_context *ctx)
>  {
> -       args->flags &=
> ~(NFS_MOUNT_NONLM|NFS_MOUNT_NOACL|NFS_MOUNT_VER3|
> +       ctx->flags &=
> ~(NFS_MOUNT_NONLM|NFS_MOUNT_NOACL|NFS_MOUNT_VER3|
>                          NFS_MOUNT_LOCAL_FLOCK|NFS_MOUNT_LOCAL_FCNTL)
> ;
>  }
> 
> @@ -1240,30 +1238,30 @@ static void nfs4_validate_mount_flags(struct
> nfs_parsed_mount_data *args)
>   * Validate NFSv4 mount options
>   */
>  static int nfs4_validate_mount_data(void *options,
> -                                   struct nfs_parsed_mount_data
> *args,
> +                                   struct nfs_fs_context *ctx,
>                                     const char *dev_name)
>  {
> -       struct sockaddr *sap = (struct sockaddr *)&args-
> >nfs_server.address;
> +       struct sockaddr *sap = (struct sockaddr *)&ctx-
> >nfs_server.address;
>         struct nfs4_mount_data *data = (struct nfs4_mount_data
> *)options;
>         char *c;
> 
>         if (data == NULL)
>                 goto out_no_data;
> 
> -       args->version = 4;
> +       ctx->version = 4;
> 
>         switch (data->version) {
>         case 1:
> -               if (data->host_addrlen > sizeof(args-
> >nfs_server.address))
> +               if (data->host_addrlen > sizeof(ctx-
> >nfs_server.address))
>                         goto out_no_address;
>                 if (data->host_addrlen == 0)
>                         goto out_no_address;
> -               args->nfs_server.addrlen = data->host_addrlen;
> +               ctx->nfs_server.addrlen = data->host_addrlen;
>                 if (copy_from_user(sap, data->host_addr, data-
> >host_addrlen))
>                         return -EFAULT;
>                 if (!nfs_verify_server_address(sap))
>                         goto out_no_address;
> -               args->nfs_server.port = ntohs(((struct sockaddr_in
> *)sap)->sin_port);
> +               ctx->nfs_server.port = ntohs(((struct sockaddr_in
> *)sap)->sin_port);
> 
>                 if (data->auth_flavourlen) {
>                         rpc_authflavor_t pseudoflavor;
> @@ -1273,43 +1271,43 @@ static int nfs4_validate_mount_data(void
> *options,
>                                            data->auth_flavours,
>                                            sizeof(pseudoflavor)))
>                                 return -EFAULT;
> -                       args->selected_flavor = pseudoflavor;
> +                       ctx->selected_flavor = pseudoflavor;
>                 } else
> -                       args->selected_flavor = RPC_AUTH_UNIX;
> +                       ctx->selected_flavor = RPC_AUTH_UNIX;
> 
>                 c = strndup_user(data->hostname.data,
> NFS4_MAXNAMLEN);
>                 if (IS_ERR(c))
>                         return PTR_ERR(c);
> -               args->nfs_server.hostname = c;
> +               ctx->nfs_server.hostname = c;
> 
>                 c = strndup_user(data->mnt_path.data,
> NFS4_MAXPATHLEN);
>                 if (IS_ERR(c))
>                         return PTR_ERR(c);
> -               args->nfs_server.export_path = c;
> +               ctx->nfs_server.export_path = c;
>                 dfprintk(MOUNT, "NFS: MNTPATH: '%s'\n", c);
> 
>                 c = strndup_user(data->client_addr.data, 16);
>                 if (IS_ERR(c))
>                         return PTR_ERR(c);
> -               args->client_address = c;
> +               ctx->client_address = c;
> 
>                 /*
> -                * Translate to nfs_parsed_mount_data, which
> nfs4_fill_super
> +                * Translate to nfs_fs_context, which nfs4_fill_super
>                  * can deal with.
>                  */
> 
> -               args->flags     = data->flags & NFS4_MOUNT_FLAGMASK;
> -               args->rsize     = data->rsize;
> -               args->wsize     = data->wsize;
> -               args->timeo     = data->timeo;
> -               args->retrans   = data->retrans;
> -               args->acregmin  = data->acregmin;
> -               args->acregmax  = data->acregmax;
> -               args->acdirmin  = data->acdirmin;
> -               args->acdirmax  = data->acdirmax;
> -               args->nfs_server.protocol = data->proto;
> -               nfs_validate_transport_protocol(args);
> -               if (args->nfs_server.protocol == XPRT_TRANSPORT_UDP)
> +               ctx->flags      = data->flags & NFS4_MOUNT_FLAGMASK;
> +               ctx->rsize      = data->rsize;
> +               ctx->wsize      = data->wsize;
> +               ctx->timeo      = data->timeo;
> +               ctx->retrans    = data->retrans;
> +               ctx->acregmin   = data->acregmin;
> +               ctx->acregmax   = data->acregmax;
> +               ctx->acdirmin   = data->acdirmin;
> +               ctx->acdirmax   = data->acdirmax;
> +               ctx->nfs_server.protocol = data->proto;
> +               nfs_validate_transport_protocol(ctx);
> +               if (ctx->nfs_server.protocol == XPRT_TRANSPORT_UDP)
>                         goto out_invalid_transport_udp;
> 
>                 break;
> @@ -1339,67 +1337,67 @@ static int nfs4_validate_mount_data(void
> *options,
> 
>  int nfs_validate_mount_data(struct file_system_type *fs_type,
>                             void *options,
> -                           struct nfs_parsed_mount_data *args,
> +                           struct nfs_fs_context *ctx,
>                             struct nfs_fh *mntfh,
>                             const char *dev_name)
>  {
>         if (fs_type == &nfs_fs_type)
> -               return nfs23_validate_mount_data(options, args,
> mntfh, dev_name);
> -       return nfs4_validate_mount_data(options, args, dev_name);
> +               return nfs23_validate_mount_data(options, ctx, mntfh,
> dev_name);
> +       return nfs4_validate_mount_data(options, ctx, dev_name);
>  }
>  #else
>  int nfs_validate_mount_data(struct file_system_type *fs_type,
>                             void *options,
> -                           struct nfs_parsed_mount_data *args,
> +                           struct nfs_fs_context *ctx,
>                             struct nfs_fh *mntfh,
>                             const char *dev_name)
>  {
> -       return nfs23_validate_mount_data(options, args, mntfh,
> dev_name);
> +       return nfs23_validate_mount_data(options, ctx, mntfh,
> dev_name);
>  }
>  #endif
> 
>  int nfs_validate_text_mount_data(void *options,
> -                                struct nfs_parsed_mount_data *args,
> +                                struct nfs_fs_context *ctx,
>                                  const char *dev_name)
>  {
>         int port = 0;
>         int max_namelen = PAGE_SIZE;
>         int max_pathlen = NFS_MAXPATHLEN;
> -       struct sockaddr *sap = (struct sockaddr *)&args-
> >nfs_server.address;
> +       struct sockaddr *sap = (struct sockaddr *)&ctx-
> >nfs_server.address;
> 
> -       if (nfs_parse_mount_options((char *)options, args) == 0)
> +       if (nfs_parse_mount_options((char *)options, ctx) == 0)
>                 return -EINVAL;
> 
>         if (!nfs_verify_server_address(sap))
>                 goto out_no_address;
> 
> -       if (args->version == 4) {
> +       if (ctx->version == 4) {
>  #if IS_ENABLED(CONFIG_NFS_V4)
> -               if (args->nfs_server.protocol == XPRT_TRANSPORT_RDMA)
> +               if (ctx->nfs_server.protocol == XPRT_TRANSPORT_RDMA)
>                         port = NFS_RDMA_PORT;
>                 else
>                         port = NFS_PORT;
>                 max_namelen = NFS4_MAXNAMLEN;
>                 max_pathlen = NFS4_MAXPATHLEN;
> -               nfs_validate_transport_protocol(args);
> -               if (args->nfs_server.protocol == XPRT_TRANSPORT_UDP)
> +               nfs_validate_transport_protocol(ctx);
> +               if (ctx->nfs_server.protocol == XPRT_TRANSPORT_UDP)
>                         goto out_invalid_transport_udp;
> -               nfs4_validate_mount_flags(args);
> +               nfs4_validate_mount_flags(ctx);
>  #else
>                 goto out_v4_not_compiled;
>  #endif /* CONFIG_NFS_V4 */
>         } else {
> -               nfs_set_mount_transport_protocol(args);
> -               if (args->nfs_server.protocol == XPRT_TRANSPORT_RDMA)
> +               nfs_set_mount_transport_protocol(ctx);
> +               if (ctx->nfs_server.protocol == XPRT_TRANSPORT_RDMA)
>                         port = NFS_RDMA_PORT;
>         }
> 
> -       nfs_set_port(sap, &args->nfs_server.port, port);
> +       nfs_set_port(sap, &ctx->nfs_server.port, port);
> 
>         return nfs_parse_devname(dev_name,
> -                                  &args->nfs_server.hostname,
> +                                  &ctx->nfs_server.hostname,
>                                    max_namelen,
> -                                  &args->nfs_server.export_path,
> +                                  &ctx->nfs_server.export_path,
>                                    max_pathlen);
> 
>  #if !IS_ENABLED(CONFIG_NFS_V4)
> diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
> index b66fd35993b3..632174d666a8 100644
> --- a/fs/nfs/internal.h
> +++ b/fs/nfs/internal.h
> @@ -89,7 +89,7 @@ struct nfs_client_initdata {
>  /*
>   * In-kernel mount arguments
>   */
> -struct nfs_parsed_mount_data {
> +struct nfs_fs_context {
>         int                     flags;
>         unsigned int            rsize, wsize;
>         unsigned int            timeo, retrans;
> @@ -146,7 +146,7 @@ struct nfs_mount_request {
> 
>  struct nfs_mount_info {
>         unsigned int inherited_bsize;
> -       struct nfs_parsed_mount_data *parsed;
> +       struct nfs_fs_context *ctx;
>         struct nfs_clone_mount *cloned;
>         struct nfs_server *server;
>         struct nfs_fh *mntfh;
> @@ -237,16 +237,16 @@ struct nfs_pageio_descriptor;
>  /* mount.c */
>  #define NFS_TEXT_DATA          1
> 
> -extern struct nfs_parsed_mount_data
> *nfs_alloc_parsed_mount_data(void);
> -extern void nfs_free_parsed_mount_data(struct nfs_parsed_mount_data
> *data);
> -extern int nfs_parse_mount_options(char *raw, struct
> nfs_parsed_mount_data *mnt);
> +extern struct nfs_fs_context *nfs_alloc_parsed_mount_data(void);
> +extern void nfs_free_parsed_mount_data(struct nfs_fs_context *ctx);
> +extern int nfs_parse_mount_options(char *raw, struct nfs_fs_context
> *ctx);
>  extern int nfs_validate_mount_data(struct file_system_type *fs_type,
>                                    void *options,
> -                                  struct nfs_parsed_mount_data
> *args,
> +                                  struct nfs_fs_context *ctx,
>                                    struct nfs_fh *mntfh,
>                                    const char *dev_name);
>  extern int nfs_validate_text_mount_data(void *options,
> -                                       struct nfs_parsed_mount_data
> *args,
> +                                       struct nfs_fs_context *ctx,
>                                         const char *dev_name);
> 
>  /* pagelist.c */
> diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c
> index 16fba83b5c4b..2ee2281ce404 100644
> --- a/fs/nfs/nfs4client.c
> +++ b/fs/nfs/nfs4client.c
> @@ -1053,61 +1053,61 @@ static int nfs4_server_common_setup(struct
> nfs_server *server,
>   * Create a version 4 volume record
>   */
>  static int nfs4_init_server(struct nfs_server *server,
> -               struct nfs_parsed_mount_data *data)
> +                           struct nfs_fs_context *ctx)
>  {
>         struct rpc_timeout timeparms;
>         int error;
> 
> -       nfs_init_timeout_values(&timeparms, data-
> >nfs_server.protocol,
> -                       data->timeo, data->retrans);
> +       nfs_init_timeout_values(&timeparms, ctx->nfs_server.protocol,
> +                               ctx->timeo, ctx->retrans);
> 
>         /* Initialise the client representation from the mount data
> */
> -       server->flags = data->flags;
> -       server->options = data->options;
> -       server->auth_info = data->auth_info;
> +       server->flags = ctx->flags;
> +       server->options = ctx->options;
> +       server->auth_info = ctx->auth_info;
> 
>         /* Use the first specified auth flavor. If this flavor isn't
>          * allowed by the server, use the SECINFO path to try the
>          * other specified flavors */
> -       if (data->auth_info.flavor_len >= 1)
> -               data->selected_flavor = data->auth_info.flavors[0];
> +       if (ctx->auth_info.flavor_len >= 1)
> +               ctx->selected_flavor = ctx->auth_info.flavors[0];
>         else
> -               data->selected_flavor = RPC_AUTH_UNIX;
> +               ctx->selected_flavor = RPC_AUTH_UNIX;
> 
>         /* Get a client record */
>         error = nfs4_set_client(server,
> -                       data->nfs_server.hostname,
> -                       (const struct sockaddr *)&data-
> >nfs_server.address,
> -                       data->nfs_server.addrlen,
> -                       data->client_address,
> -                       data->nfs_server.protocol,
> +                       ctx->nfs_server.hostname,
> +                       (const struct sockaddr *)&ctx-
> >nfs_server.address,
> +                       ctx->nfs_server.addrlen,
> +                       ctx->client_address,
> +                       ctx->nfs_server.protocol,
>                         &timeparms,
> -                       data->minorversion,
> -                       data->nfs_server.nconnect,
> -                       data->net);
> +                       ctx->minorversion,
> +                       ctx->nfs_server.nconnect,
> +                       ctx->net);
>         if (error < 0)
>                 return error;
> 
> -       if (data->rsize)
> -               server->rsize = nfs_block_size(data->rsize, NULL);
> -       if (data->wsize)
> -               server->wsize = nfs_block_size(data->wsize, NULL);
> +       if (ctx->rsize)
> +               server->rsize = nfs_block_size(ctx->rsize, NULL);
> +       if (ctx->wsize)
> +               server->wsize = nfs_block_size(ctx->wsize, NULL);
> 
> -       server->acregmin = data->acregmin * HZ;
> -       server->acregmax = data->acregmax * HZ;
> -       server->acdirmin = data->acdirmin * HZ;
> -       server->acdirmax = data->acdirmax * HZ;
> -       server->port     = data->nfs_server.port;
> +       server->acregmin = ctx->acregmin * HZ;
> +       server->acregmax = ctx->acregmax * HZ;
> +       server->acdirmin = ctx->acdirmin * HZ;
> +       server->acdirmax = ctx->acdirmax * HZ;
> +       server->port     = ctx->nfs_server.port;
> 
>         return nfs_init_server_rpcclient(server, &timeparms,
> -                                        data->selected_flavor);
> +                                        ctx->selected_flavor);
>  }
> 
>  /*
>   * Create a version 4 volume record
>   * - keyed on server and FSID
>   */
> -/*struct nfs_server *nfs4_create_server(const struct
> nfs_parsed_mount_data *data,
> +/*struct nfs_server *nfs4_create_server(const struct nfs_fs_context
> *data,
>                                       struct nfs_fh *mntfh)*/
>  struct nfs_server *nfs4_create_server(struct nfs_mount_info
> *mount_info)
>  {
> @@ -1121,10 +1121,10 @@ struct nfs_server *nfs4_create_server(struct
> nfs_mount_info *mount_info)
> 
>         server->cred = get_cred(current_cred());
> 
> -       auth_probe = mount_info->parsed->auth_info.flavor_len < 1;
> +       auth_probe = mount_info->ctx->auth_info.flavor_len < 1;
> 
>         /* set up the general RPC client */
> -       error = nfs4_init_server(server, mount_info->parsed);
> +       error = nfs4_init_server(server, mount_info->ctx);
>         if (error < 0)
>                 goto error;
> 
> diff --git a/fs/nfs/nfs4super.c b/fs/nfs/nfs4super.c
> index 38f2eec7e1ad..ca9740137cfe 100644
> --- a/fs/nfs/nfs4super.c
> +++ b/fs/nfs/nfs4super.c
> @@ -198,15 +198,15 @@ static struct dentry *do_nfs4_mount(struct
> nfs_server *server, int flags,
>  struct dentry *nfs4_try_mount(int flags, const char *dev_name,
>                               struct nfs_mount_info *mount_info)
>  {
> -       struct nfs_parsed_mount_data *data = mount_info->parsed;
> +       struct nfs_fs_context *ctx = mount_info->ctx;
>         struct dentry *res;
> 
>         dfprintk(MOUNT, "--> nfs4_try_mount()\n");
> 
>         res = do_nfs4_mount(nfs4_create_server(mount_info),
>                             flags, mount_info,
> -                           data->nfs_server.hostname,
> -                           data->nfs_server.export_path);
> +                           ctx->nfs_server.hostname,
> +                           ctx->nfs_server.export_path);
> 
>         dfprintk(MOUNT, "<-- nfs4_try_mount() = %d%s\n",
>                  PTR_ERR_OR_ZERO(res),
> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index 886220d2da4e..abd99ed00e39 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -726,12 +726,13 @@ bool nfs_auth_info_match(const struct
> nfs_auth_info *auth_info,
>  EXPORT_SYMBOL_GPL(nfs_auth_info_match);
> 
>  /*
> - * Ensure that a specified authtype in args->auth_info is supported
> by
> - * the server. Returns 0 and sets args->selected_flavor if it's ok,
> and
> + * Ensure that a specified authtype in cfg->auth_info is supported
> by
> + * the server. Returns 0 and sets cfg->selected_flavor if it's ok,
> and
>   * -EACCES if not.
>   */
> -static int nfs_verify_authflavors(struct nfs_parsed_mount_data
> *args,
> -                       rpc_authflavor_t *server_authlist, unsigned
> int count)
> +static int nfs_verify_authflavors(struct nfs_fs_context *cfg,
> +                                 rpc_authflavor_t *server_authlist,
> +                                 unsigned int count)
>  {
>         rpc_authflavor_t flavor = RPC_AUTH_MAXFLAVOR;
>         bool found_auth_null = false;
> @@ -752,7 +753,7 @@ static int nfs_verify_authflavors(struct
> nfs_parsed_mount_data *args,
>         for (i = 0; i < count; i++) {
>                 flavor = server_authlist[i];
> 
> -               if (nfs_auth_info_match(&args->auth_info, flavor))
> +               if (nfs_auth_info_match(&cfg->auth_info, flavor))
>                         goto out;
> 
>                 if (flavor == RPC_AUTH_NULL)
> @@ -760,7 +761,7 @@ static int nfs_verify_authflavors(struct
> nfs_parsed_mount_data *args,
>         }
> 
>         if (found_auth_null) {
> -               flavor = args->auth_info.flavors[0];
> +               flavor = cfg->auth_info.flavors[0];
>                 goto out;
>         }
> 
> @@ -769,8 +770,8 @@ static int nfs_verify_authflavors(struct
> nfs_parsed_mount_data *args,
>         return -EACCES;
> 
>  out:
> -       args->selected_flavor = flavor;
> -       dfprintk(MOUNT, "NFS: using auth flavor %u\n", args-
> >selected_flavor);
> +       cfg->selected_flavor = flavor;
> +       dfprintk(MOUNT, "NFS: using auth flavor %u\n", cfg-
> >selected_flavor);
>         return 0;
>  }
> 
> @@ -778,50 +779,50 @@ static int nfs_verify_authflavors(struct
> nfs_parsed_mount_data *args,
>   * Use the remote server's MOUNT service to request the NFS file
> handle
>   * corresponding to the provided path.
>   */
> -static int nfs_request_mount(struct nfs_parsed_mount_data *args,
> +static int nfs_request_mount(struct nfs_fs_context *cfg,
>                              struct nfs_fh *root_fh,
>                              rpc_authflavor_t *server_authlist,
>                              unsigned int *server_authlist_len)
>  {
>         struct nfs_mount_request request = {
>                 .sap            = (struct sockaddr *)
> -                                               &args-
> >mount_server.address,
> -               .dirpath        = args->nfs_server.export_path,
> -               .protocol       = args->mount_server.protocol,
> +                                               &cfg-
> >mount_server.address,
> +               .dirpath        = cfg->nfs_server.export_path,
> +               .protocol       = cfg->mount_server.protocol,
>                 .fh             = root_fh,
> -               .noresvport     = args->flags & NFS_MOUNT_NORESVPORT,
> +               .noresvport     = cfg->flags & NFS_MOUNT_NORESVPORT,
>                 .auth_flav_len  = server_authlist_len,
>                 .auth_flavs     = server_authlist,
> -               .net            = args->net,
> +               .net            = cfg->net,
>         };
>         int status;
> 
> -       if (args->mount_server.version == 0) {
> -               switch (args->version) {
> +       if (cfg->mount_server.version == 0) {
> +               switch (cfg->version) {
>                         default:
> -                               args->mount_server.version =
> NFS_MNT3_VERSION;
> +                               cfg->mount_server.version =
> NFS_MNT3_VERSION;
>                                 break;
>                         case 2:
> -                               args->mount_server.version =
> NFS_MNT_VERSION;
> +                               cfg->mount_server.version =
> NFS_MNT_VERSION;
>                 }
>         }
> -       request.version = args->mount_server.version;
> +       request.version = cfg->mount_server.version;
> 
> -       if (args->mount_server.hostname)
> -               request.hostname = args->mount_server.hostname;
> +       if (cfg->mount_server.hostname)
> +               request.hostname = cfg->mount_server.hostname;
>         else
> -               request.hostname = args->nfs_server.hostname;
> +               request.hostname = cfg->nfs_server.hostname;
> 
>         /*
>          * Construct the mount server's address.
>          */
> -       if (args->mount_server.address.ss_family == AF_UNSPEC) {
> -               memcpy(request.sap, &args->nfs_server.address,
> -                      args->nfs_server.addrlen);
> -               args->mount_server.addrlen = args-
> >nfs_server.addrlen;
> +       if (cfg->mount_server.address.ss_family == AF_UNSPEC) {
> +               memcpy(request.sap, &cfg->nfs_server.address,
> +                      cfg->nfs_server.addrlen);
> +               cfg->mount_server.addrlen = cfg->nfs_server.addrlen;
>         }
> -       request.salen = args->mount_server.addrlen;
> -       nfs_set_port(request.sap, &args->mount_server.port, 0);
> +       request.salen = cfg->mount_server.addrlen;
> +       nfs_set_port(request.sap, &cfg->mount_server.port, 0);
> 
>         /*
>          * Now ask the mount server to map our export path
> @@ -844,12 +845,12 @@ static struct nfs_server
> *nfs_try_mount_request(struct nfs_mount_info *mount_inf
>         bool tried_auth_unix = false;
>         bool auth_null_in_list = false;
>         struct nfs_server *server = ERR_PTR(-EACCES);
> -       struct nfs_parsed_mount_data *args = mount_info->parsed;
> +       struct nfs_fs_context *ctx = mount_info->ctx;
>         rpc_authflavor_t authlist[NFS_MAX_SECFLAVORS];
>         unsigned int authlist_len = ARRAY_SIZE(authlist);
>         struct nfs_subversion *nfs_mod = mount_info->nfs_mod;
> 
> -       status = nfs_request_mount(args, mount_info->mntfh, authlist,
> +       status = nfs_request_mount(ctx, mount_info->mntfh, authlist,
>                                         &authlist_len);
>         if (status)
>                 return ERR_PTR(status);
> @@ -858,10 +859,10 @@ static struct nfs_server
> *nfs_try_mount_request(struct nfs_mount_info *mount_inf
>          * Was a sec= authflavor specified in the options? First,
> verify
>          * whether the server supports it, and then just try to use
> it if so.
>          */
> -       if (args->auth_info.flavor_len > 0) {
> -               status = nfs_verify_authflavors(args, authlist,
> authlist_len);
> +       if (ctx->auth_info.flavor_len > 0) {
> +               status = nfs_verify_authflavors(ctx, authlist,
> authlist_len);
>                 dfprintk(MOUNT, "NFS: using auth flavor %u\n",
> -                        args->selected_flavor);
> +                        ctx->selected_flavor);
>                 if (status)
>                         return ERR_PTR(status);
>                 return nfs_mod->rpc_ops->create_server(mount_info);
> @@ -890,7 +891,7 @@ static struct nfs_server
> *nfs_try_mount_request(struct nfs_mount_info *mount_inf
>                         /* Fallthrough */
>                 }
>                 dfprintk(MOUNT, "NFS: attempting to use auth flavor
> %u\n", flavor);
> -               args->selected_flavor = flavor;
> +               ctx->selected_flavor = flavor;
>                 server = nfs_mod->rpc_ops->create_server(mount_info);
>                 if (!IS_ERR(server))
>                         return server;
> @@ -906,7 +907,7 @@ static struct nfs_server
> *nfs_try_mount_request(struct nfs_mount_info *mount_inf
> 
>         /* Last chance! Try AUTH_UNIX */
>         dfprintk(MOUNT, "NFS: attempting to use auth flavor %u\n",
> RPC_AUTH_UNIX);
> -       args->selected_flavor = RPC_AUTH_UNIX;
> +       ctx->selected_flavor = RPC_AUTH_UNIX;
>         return nfs_mod->rpc_ops->create_server(mount_info);
>  }
> 
> @@ -916,7 +917,7 @@ struct dentry *nfs_try_mount(int flags, const
> char *dev_name,
>                              struct nfs_mount_info *mount_info)
>  {
>         struct nfs_subversion *nfs_mod = mount_info->nfs_mod;
> -       if (mount_info->parsed->need_mount)
> +       if (mount_info->ctx->need_mount)
>                 mount_info->server =
> nfs_try_mount_request(mount_info);
>         else
>                 mount_info->server = nfs_mod->rpc_ops-
> >create_server(mount_info);
> @@ -940,24 +941,24 @@ EXPORT_SYMBOL_GPL(nfs_try_mount);
> 
>  static int
>  nfs_compare_remount_data(struct nfs_server *nfss,
> -                        struct nfs_parsed_mount_data *data)
> +                        struct nfs_fs_context *ctx)
>  {
> -       if ((data->flags ^ nfss->flags) & NFS_REMOUNT_CMP_FLAGMASK ||
> -           data->rsize != nfss->rsize ||
> -           data->wsize != nfss->wsize ||
> -           data->version != nfss->nfs_client->rpc_ops->version ||
> -           data->minorversion != nfss->nfs_client->cl_minorversion
> ||
> -           data->retrans != nfss->client->cl_timeout->to_retries ||
> -           !nfs_auth_info_match(&data->auth_info, nfss->client-
> >cl_auth->au_flavor) ||
> -           data->acregmin != nfss->acregmin / HZ ||
> -           data->acregmax != nfss->acregmax / HZ ||
> -           data->acdirmin != nfss->acdirmin / HZ ||
> -           data->acdirmax != nfss->acdirmax / HZ ||
> -           data->timeo != (10U * nfss->client->cl_timeout-
> >to_initval / HZ) ||
> -           (data->options & NFS_OPTION_FSCACHE) != (nfss->options &
> NFS_OPTION_FSCACHE) ||
> -           data->nfs_server.port != nfss->port ||
> -           data->nfs_server.addrlen != nfss->nfs_client->cl_addrlen
> ||
> -           !rpc_cmp_addr((struct sockaddr *)&data-
> >nfs_server.address,
> +       if ((ctx->flags ^ nfss->flags) & NFS_REMOUNT_CMP_FLAGMASK ||
> +           ctx->rsize != nfss->rsize ||
> +           ctx->wsize != nfss->wsize ||
> +           ctx->version != nfss->nfs_client->rpc_ops->version ||
> +           ctx->minorversion != nfss->nfs_client->cl_minorversion ||
> +           ctx->retrans != nfss->client->cl_timeout->to_retries ||
> +           !nfs_auth_info_match(&ctx->auth_info, nfss->client-
> >cl_auth->au_flavor) ||
> +           ctx->acregmin != nfss->acregmin / HZ ||
> +           ctx->acregmax != nfss->acregmax / HZ ||
> +           ctx->acdirmin != nfss->acdirmin / HZ ||
> +           ctx->acdirmax != nfss->acdirmax / HZ ||
> +           ctx->timeo != (10U * nfss->client->cl_timeout->to_initval 
> / HZ) ||
> +           (ctx->options & NFS_OPTION_FSCACHE) != (nfss->options &
> NFS_OPTION_FSCACHE) ||
> +           ctx->nfs_server.port != nfss->port ||
> +           ctx->nfs_server.addrlen != nfss->nfs_client->cl_addrlen
> ||
> +           !rpc_cmp_addr((struct sockaddr *)&ctx-
> >nfs_server.address,
>                           (struct sockaddr *)&nfss->nfs_client-
> >cl_addr))
>                 return -EINVAL;
> 
> @@ -969,7 +970,7 @@ nfs_remount(struct super_block *sb, int *flags,
> char *raw_data)
>  {
>         int error;
>         struct nfs_server *nfss = sb->s_fs_info;
> -       struct nfs_parsed_mount_data *data;
> +       struct nfs_fs_context *ctx;
>         struct nfs_mount_data *options = (struct nfs_mount_data
> *)raw_data;
>         struct nfs4_mount_data *options4 = (struct nfs4_mount_data
> *)raw_data;
>         u32 nfsvers = nfss->nfs_client->rpc_ops->version;
> @@ -987,32 +988,32 @@ nfs_remount(struct super_block *sb, int *flags,
> char *raw_data)
>                                            options->version <= 6))))
>                 return 0;
> 
> -       data = nfs_alloc_parsed_mount_data();
> -       if (data == NULL)
> +       ctx = nfs_alloc_parsed_mount_data();
> +       if (ctx == NULL)
>                 return -ENOMEM;
> 
>         /* fill out struct with values from existing mount */
> -       data->flags = nfss->flags;
> -       data->rsize = nfss->rsize;
> -       data->wsize = nfss->wsize;
> -       data->retrans = nfss->client->cl_timeout->to_retries;
> -       data->selected_flavor = nfss->client->cl_auth->au_flavor;
> -       data->acregmin = nfss->acregmin / HZ;
> -       data->acregmax = nfss->acregmax / HZ;
> -       data->acdirmin = nfss->acdirmin / HZ;
> -       data->acdirmax = nfss->acdirmax / HZ;
> -       data->timeo = 10U * nfss->client->cl_timeout->to_initval /
> HZ;
> -       data->nfs_server.port = nfss->port;
> -       data->nfs_server.addrlen = nfss->nfs_client->cl_addrlen;
> -       data->version = nfsvers;
> -       data->minorversion = nfss->nfs_client->cl_minorversion;
> -       data->net = current->nsproxy->net_ns;
> -       memcpy(&data->nfs_server.address, &nfss->nfs_client->cl_addr,
> -               data->nfs_server.addrlen);
> +       ctx->flags = nfss->flags;
> +       ctx->rsize = nfss->rsize;
> +       ctx->wsize = nfss->wsize;
> +       ctx->retrans = nfss->client->cl_timeout->to_retries;
> +       ctx->selected_flavor = nfss->client->cl_auth->au_flavor;
> +       ctx->acregmin = nfss->acregmin / HZ;
> +       ctx->acregmax = nfss->acregmax / HZ;
> +       ctx->acdirmin = nfss->acdirmin / HZ;
> +       ctx->acdirmax = nfss->acdirmax / HZ;
> +       ctx->timeo = 10U * nfss->client->cl_timeout->to_initval / HZ;
> +       ctx->nfs_server.port = nfss->port;
> +       ctx->nfs_server.addrlen = nfss->nfs_client->cl_addrlen;
> +       ctx->version = nfsvers;
> +       ctx->minorversion = nfss->nfs_client->cl_minorversion;
> +       ctx->net = current->nsproxy->net_ns;
> +       memcpy(&ctx->nfs_server.address, &nfss->nfs_client->cl_addr,
> +               ctx->nfs_server.addrlen);
> 
>         /* overwrite those values with any that were specified */
>         error = -EINVAL;
> -       if (!nfs_parse_mount_options((char *)options, data))
> +       if (!nfs_parse_mount_options((char *)options, ctx))
>                 goto out;
> 
>         /*
> @@ -1021,15 +1022,15 @@ nfs_remount(struct super_block *sb, int
> *flags, char *raw_data)
>          * will clear SB_SYNCHRONOUS if -o sync wasn't specified in
> the
>          * remount options, so we have to explicitly reset it.
>          */
> -       if (data->flags & NFS_MOUNT_NOAC)
> +       if (ctx->flags & NFS_MOUNT_NOAC)
>                 *flags |= SB_SYNCHRONOUS;
> 
>         /* compare new mount options with old ones */
> -       error = nfs_compare_remount_data(nfss, data);
> +       error = nfs_compare_remount_data(nfss, ctx);
>         if (!error)
> -               error = security_sb_remount(sb, data->lsm_opts);
> +               error = security_sb_remount(sb, ctx->lsm_opts);
>  out:
> -       nfs_free_parsed_mount_data(data);
> +       nfs_free_parsed_mount_data(ctx);
>         return error;
>  }
>  EXPORT_SYMBOL_GPL(nfs_remount);
> @@ -1039,15 +1040,15 @@ EXPORT_SYMBOL_GPL(nfs_remount);
>   */
>  static void nfs_fill_super(struct super_block *sb, struct
> nfs_mount_info *mount_info)
>  {
> -       struct nfs_parsed_mount_data *data = mount_info->parsed;
> +       struct nfs_fs_context *ctx = mount_info->ctx;
>         struct nfs_server *server = NFS_SB(sb);
> 
>         sb->s_blocksize_bits = 0;
>         sb->s_blocksize = 0;
>         sb->s_xattr = server->nfs_client->cl_nfs_mod->xattr;
>         sb->s_op = server->nfs_client->cl_nfs_mod->sops;
> -       if (data && data->bsize)
> -               sb->s_blocksize = nfs_block_size(data->bsize, &sb-
> >s_blocksize_bits);
> +       if (ctx && ctx->bsize)
> +               sb->s_blocksize = nfs_block_size(ctx->bsize, &sb-
> >s_blocksize_bits);
> 
>         if (server->nfs_client->rpc_ops->version != 2) {
>                 /* The VFS shouldn't apply the umask to mode bits. We
> will do
> @@ -1199,7 +1200,7 @@ static int nfs_compare_super(struct super_block
> *sb, void *data)
> 
>  #ifdef CONFIG_NFS_FSCACHE
>  static void nfs_get_cache_cookie(struct super_block *sb,
> -                                struct nfs_parsed_mount_data
> *parsed,
> +                                struct nfs_fs_context *ctx,
>                                  struct nfs_clone_mount *cloned)
>  {
>         struct nfs_server *nfss = NFS_SB(sb);
> @@ -1209,12 +1210,12 @@ static void nfs_get_cache_cookie(struct
> super_block *sb,
>         nfss->fscache_key = NULL;
>         nfss->fscache = NULL;
> 
> -       if (parsed) {
> -               if (!(parsed->options & NFS_OPTION_FSCACHE))
> +       if (ctx) {
> +               if (!(ctx->options & NFS_OPTION_FSCACHE))
>                         return;
> -               if (parsed->fscache_uniq) {
> -                       uniq = parsed->fscache_uniq;
> -                       ulen = strlen(parsed->fscache_uniq);
> +               if (ctx->fscache_uniq) {
> +                       uniq = ctx->fscache_uniq;
> +                       ulen = strlen(ctx->fscache_uniq);
>                 }
>         } else if (cloned) {
>                 struct nfs_server *mnt_s = NFS_SB(cloned->sb);
> @@ -1231,7 +1232,7 @@ static void nfs_get_cache_cookie(struct
> super_block *sb,
>  }
>  #else
>  static void nfs_get_cache_cookie(struct super_block *sb,
> -                                struct nfs_parsed_mount_data
> *parsed,
> +                                struct nfs_fs_context *parsed,
>                                  struct nfs_clone_mount *cloned)
>  {
>  }
> @@ -1296,7 +1297,7 @@ static struct dentry *nfs_fs_mount_common(int
> flags, const char *dev_name,
>                         s->s_blocksize_bits = bsize;
>                         s->s_blocksize = 1U << bsize;
>                 }
> -               nfs_get_cache_cookie(s, mount_info->parsed,
> mount_info->cloned);
> +               nfs_get_cache_cookie(s, mount_info->ctx, mount_info-
> >cloned);
>                 if (!(server->flags & NFS_MOUNT_UNSHARED))
>                         s->s_iflags |= SB_I_MULTIROOT;
>         }
> @@ -1317,7 +1318,7 @@ static struct dentry *nfs_fs_mount_common(int
> flags, const char *dev_name,
>                 error = security_sb_clone_mnt_opts(mount_info-
> >cloned->sb, s, kflags,
>                                 &kflags_out);
>         } else {
> -               error = security_sb_set_mnt_opts(s, mount_info-
> >parsed->lsm_opts,
> +               error = security_sb_set_mnt_opts(s, mount_info->ctx-
> >lsm_opts,
>                                                         kflags,
> &kflags_out);
>         }
>         if (error)
> @@ -1354,21 +1355,22 @@ struct dentry *nfs_fs_mount(struct
> file_system_type *fs_type,
>         struct nfs_subversion *nfs_mod;
>         int error;
> 
> -       mount_info.parsed = nfs_alloc_parsed_mount_data();
> +       mount_info.ctx = nfs_alloc_parsed_mount_data();
>         mount_info.mntfh = nfs_alloc_fhandle();
> -       if (mount_info.parsed == NULL || mount_info.mntfh == NULL)
> +       if (mount_info.ctx == NULL || mount_info.mntfh == NULL)
>                 goto out;
> 
>         /* Validate the mount data */
> -       error = nfs_validate_mount_data(fs_type, raw_data,
> mount_info.parsed, mount_info.mntfh, dev_name);
> +       error = nfs_validate_mount_data(fs_type, raw_data,
> mount_info.ctx, mount_info.mntfh, dev_name);
>         if (error == NFS_TEXT_DATA)
> -               error = nfs_validate_text_mount_data(raw_data,
> mount_info.parsed, dev_name);
> +               error = nfs_validate_text_mount_data(raw_data,
> +                                                    mount_info.ctx,
> dev_name);
>         if (error < 0) {
>                 mntroot = ERR_PTR(error);
>                 goto out;
>         }
> 
> -       nfs_mod = get_nfs_version(mount_info.parsed->version);
> +       nfs_mod = get_nfs_version(mount_info.ctx->version);
>         if (IS_ERR(nfs_mod)) {
>                 mntroot = ERR_CAST(nfs_mod);
>                 goto out;
> @@ -1379,7 +1381,7 @@ struct dentry *nfs_fs_mount(struct
> file_system_type *fs_type,
> 
>         put_nfs_version(nfs_mod);
>  out:
> -       nfs_free_parsed_mount_data(mount_info.parsed);
> +       nfs_free_parsed_mount_data(mount_info.ctx);
>         nfs_free_fhandle(mount_info.mntfh);
>         return mntroot;
>  }
> --
> 2.17.2
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ