NFS: Deindent nfs_fs_context_parse_option()
Deindent nfs_fs_context_parse_option(). Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
f8ee01e3e2
commit
cbd071b5da
|
@ -500,410 +500,405 @@ static int nfs_get_option_ul_bound(substring_t args[], unsigned long *option,
|
||||||
*/
|
*/
|
||||||
static int nfs_fs_context_parse_option(struct nfs_fs_context *ctx, char *p)
|
static int nfs_fs_context_parse_option(struct nfs_fs_context *ctx, char *p)
|
||||||
{
|
{
|
||||||
|
substring_t args[MAX_OPT_ARGS];
|
||||||
|
unsigned long option;
|
||||||
char *string;
|
char *string;
|
||||||
int rc;
|
int token, rc;
|
||||||
|
|
||||||
{
|
dfprintk(MOUNT, "NFS: parsing nfs mount option '%s'\n", p);
|
||||||
substring_t args[MAX_OPT_ARGS];
|
|
||||||
unsigned long option;
|
|
||||||
int token;
|
|
||||||
|
|
||||||
dfprintk(MOUNT, "NFS: parsing nfs mount option '%s'\n", p);
|
|
||||||
|
|
||||||
token = match_token(p, nfs_mount_option_tokens, args);
|
|
||||||
switch (token) {
|
|
||||||
|
|
||||||
|
token = match_token(p, nfs_mount_option_tokens, args);
|
||||||
|
switch (token) {
|
||||||
/*
|
/*
|
||||||
* boolean options: foo/nofoo
|
* boolean options: foo/nofoo
|
||||||
*/
|
*/
|
||||||
case Opt_soft:
|
case Opt_soft:
|
||||||
ctx->flags |= NFS_MOUNT_SOFT;
|
ctx->flags |= NFS_MOUNT_SOFT;
|
||||||
ctx->flags &= ~NFS_MOUNT_SOFTERR;
|
ctx->flags &= ~NFS_MOUNT_SOFTERR;
|
||||||
break;
|
break;
|
||||||
case Opt_softerr:
|
case Opt_softerr:
|
||||||
ctx->flags |= NFS_MOUNT_SOFTERR;
|
ctx->flags |= NFS_MOUNT_SOFTERR;
|
||||||
ctx->flags &= ~NFS_MOUNT_SOFT;
|
ctx->flags &= ~NFS_MOUNT_SOFT;
|
||||||
break;
|
break;
|
||||||
case Opt_hard:
|
case Opt_hard:
|
||||||
ctx->flags &= ~(NFS_MOUNT_SOFT|NFS_MOUNT_SOFTERR);
|
ctx->flags &= ~(NFS_MOUNT_SOFT|NFS_MOUNT_SOFTERR);
|
||||||
break;
|
break;
|
||||||
case Opt_posix:
|
case Opt_posix:
|
||||||
ctx->flags |= NFS_MOUNT_POSIX;
|
ctx->flags |= NFS_MOUNT_POSIX;
|
||||||
break;
|
break;
|
||||||
case Opt_noposix:
|
case Opt_noposix:
|
||||||
ctx->flags &= ~NFS_MOUNT_POSIX;
|
ctx->flags &= ~NFS_MOUNT_POSIX;
|
||||||
break;
|
break;
|
||||||
case Opt_cto:
|
case Opt_cto:
|
||||||
ctx->flags &= ~NFS_MOUNT_NOCTO;
|
ctx->flags &= ~NFS_MOUNT_NOCTO;
|
||||||
break;
|
break;
|
||||||
case Opt_nocto:
|
case Opt_nocto:
|
||||||
ctx->flags |= NFS_MOUNT_NOCTO;
|
ctx->flags |= NFS_MOUNT_NOCTO;
|
||||||
break;
|
break;
|
||||||
case Opt_ac:
|
case Opt_ac:
|
||||||
ctx->flags &= ~NFS_MOUNT_NOAC;
|
ctx->flags &= ~NFS_MOUNT_NOAC;
|
||||||
break;
|
break;
|
||||||
case Opt_noac:
|
case Opt_noac:
|
||||||
ctx->flags |= NFS_MOUNT_NOAC;
|
ctx->flags |= NFS_MOUNT_NOAC;
|
||||||
break;
|
break;
|
||||||
case Opt_lock:
|
case Opt_lock:
|
||||||
ctx->flags &= ~NFS_MOUNT_NONLM;
|
ctx->flags &= ~NFS_MOUNT_NONLM;
|
||||||
ctx->flags &= ~(NFS_MOUNT_LOCAL_FLOCK |
|
ctx->flags &= ~(NFS_MOUNT_LOCAL_FLOCK |
|
||||||
NFS_MOUNT_LOCAL_FCNTL);
|
NFS_MOUNT_LOCAL_FCNTL);
|
||||||
break;
|
break;
|
||||||
case Opt_nolock:
|
case Opt_nolock:
|
||||||
ctx->flags |= NFS_MOUNT_NONLM;
|
ctx->flags |= NFS_MOUNT_NONLM;
|
||||||
ctx->flags |= (NFS_MOUNT_LOCAL_FLOCK |
|
ctx->flags |= (NFS_MOUNT_LOCAL_FLOCK |
|
||||||
NFS_MOUNT_LOCAL_FCNTL);
|
NFS_MOUNT_LOCAL_FCNTL);
|
||||||
break;
|
break;
|
||||||
case Opt_udp:
|
case Opt_udp:
|
||||||
ctx->flags &= ~NFS_MOUNT_TCP;
|
ctx->flags &= ~NFS_MOUNT_TCP;
|
||||||
ctx->nfs_server.protocol = XPRT_TRANSPORT_UDP;
|
ctx->nfs_server.protocol = XPRT_TRANSPORT_UDP;
|
||||||
break;
|
break;
|
||||||
case Opt_tcp:
|
case Opt_tcp:
|
||||||
ctx->flags |= NFS_MOUNT_TCP;
|
ctx->flags |= NFS_MOUNT_TCP;
|
||||||
ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP;
|
ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP;
|
||||||
break;
|
break;
|
||||||
case Opt_rdma:
|
case Opt_rdma:
|
||||||
ctx->flags |= NFS_MOUNT_TCP; /* for side protocols */
|
ctx->flags |= NFS_MOUNT_TCP; /* for side protocols */
|
||||||
ctx->nfs_server.protocol = XPRT_TRANSPORT_RDMA;
|
ctx->nfs_server.protocol = XPRT_TRANSPORT_RDMA;
|
||||||
xprt_load_transport(p);
|
xprt_load_transport(p);
|
||||||
break;
|
break;
|
||||||
case Opt_acl:
|
case Opt_acl:
|
||||||
ctx->flags &= ~NFS_MOUNT_NOACL;
|
ctx->flags &= ~NFS_MOUNT_NOACL;
|
||||||
break;
|
break;
|
||||||
case Opt_noacl:
|
case Opt_noacl:
|
||||||
ctx->flags |= NFS_MOUNT_NOACL;
|
ctx->flags |= NFS_MOUNT_NOACL;
|
||||||
break;
|
break;
|
||||||
case Opt_rdirplus:
|
case Opt_rdirplus:
|
||||||
ctx->flags &= ~NFS_MOUNT_NORDIRPLUS;
|
ctx->flags &= ~NFS_MOUNT_NORDIRPLUS;
|
||||||
break;
|
break;
|
||||||
case Opt_nordirplus:
|
case Opt_nordirplus:
|
||||||
ctx->flags |= NFS_MOUNT_NORDIRPLUS;
|
ctx->flags |= NFS_MOUNT_NORDIRPLUS;
|
||||||
break;
|
break;
|
||||||
case Opt_sharecache:
|
case Opt_sharecache:
|
||||||
ctx->flags &= ~NFS_MOUNT_UNSHARED;
|
ctx->flags &= ~NFS_MOUNT_UNSHARED;
|
||||||
break;
|
break;
|
||||||
case Opt_nosharecache:
|
case Opt_nosharecache:
|
||||||
ctx->flags |= NFS_MOUNT_UNSHARED;
|
ctx->flags |= NFS_MOUNT_UNSHARED;
|
||||||
break;
|
break;
|
||||||
case Opt_resvport:
|
case Opt_resvport:
|
||||||
ctx->flags &= ~NFS_MOUNT_NORESVPORT;
|
ctx->flags &= ~NFS_MOUNT_NORESVPORT;
|
||||||
break;
|
break;
|
||||||
case Opt_noresvport:
|
case Opt_noresvport:
|
||||||
ctx->flags |= NFS_MOUNT_NORESVPORT;
|
ctx->flags |= NFS_MOUNT_NORESVPORT;
|
||||||
break;
|
break;
|
||||||
case Opt_fscache:
|
case Opt_fscache:
|
||||||
ctx->options |= NFS_OPTION_FSCACHE;
|
ctx->options |= NFS_OPTION_FSCACHE;
|
||||||
kfree(ctx->fscache_uniq);
|
kfree(ctx->fscache_uniq);
|
||||||
ctx->fscache_uniq = NULL;
|
ctx->fscache_uniq = NULL;
|
||||||
break;
|
break;
|
||||||
case Opt_nofscache:
|
case Opt_nofscache:
|
||||||
ctx->options &= ~NFS_OPTION_FSCACHE;
|
ctx->options &= ~NFS_OPTION_FSCACHE;
|
||||||
kfree(ctx->fscache_uniq);
|
kfree(ctx->fscache_uniq);
|
||||||
ctx->fscache_uniq = NULL;
|
ctx->fscache_uniq = NULL;
|
||||||
break;
|
break;
|
||||||
case Opt_migration:
|
case Opt_migration:
|
||||||
ctx->options |= NFS_OPTION_MIGRATION;
|
ctx->options |= NFS_OPTION_MIGRATION;
|
||||||
break;
|
break;
|
||||||
case Opt_nomigration:
|
case Opt_nomigration:
|
||||||
ctx->options &= ~NFS_OPTION_MIGRATION;
|
ctx->options &= ~NFS_OPTION_MIGRATION;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* options that take numeric values
|
* options that take numeric values
|
||||||
*/
|
*/
|
||||||
case Opt_port:
|
case Opt_port:
|
||||||
if (nfs_get_option_ul(args, &option) ||
|
if (nfs_get_option_ul(args, &option) ||
|
||||||
option > USHRT_MAX)
|
option > USHRT_MAX)
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->nfs_server.port = option;
|
ctx->nfs_server.port = option;
|
||||||
break;
|
break;
|
||||||
case Opt_rsize:
|
case Opt_rsize:
|
||||||
if (nfs_get_option_ul(args, &option))
|
if (nfs_get_option_ul(args, &option))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->rsize = option;
|
ctx->rsize = option;
|
||||||
break;
|
break;
|
||||||
case Opt_wsize:
|
case Opt_wsize:
|
||||||
if (nfs_get_option_ul(args, &option))
|
if (nfs_get_option_ul(args, &option))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->wsize = option;
|
ctx->wsize = option;
|
||||||
break;
|
break;
|
||||||
case Opt_bsize:
|
case Opt_bsize:
|
||||||
if (nfs_get_option_ul(args, &option))
|
if (nfs_get_option_ul(args, &option))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->bsize = option;
|
ctx->bsize = option;
|
||||||
break;
|
break;
|
||||||
case Opt_timeo:
|
case Opt_timeo:
|
||||||
if (nfs_get_option_ul_bound(args, &option, 1, INT_MAX))
|
if (nfs_get_option_ul_bound(args, &option, 1, INT_MAX))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->timeo = option;
|
ctx->timeo = option;
|
||||||
break;
|
break;
|
||||||
case Opt_retrans:
|
case Opt_retrans:
|
||||||
if (nfs_get_option_ul_bound(args, &option, 0, INT_MAX))
|
if (nfs_get_option_ul_bound(args, &option, 0, INT_MAX))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->retrans = option;
|
ctx->retrans = option;
|
||||||
break;
|
break;
|
||||||
case Opt_acregmin:
|
case Opt_acregmin:
|
||||||
if (nfs_get_option_ul(args, &option))
|
if (nfs_get_option_ul(args, &option))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->acregmin = option;
|
ctx->acregmin = option;
|
||||||
break;
|
break;
|
||||||
case Opt_acregmax:
|
case Opt_acregmax:
|
||||||
if (nfs_get_option_ul(args, &option))
|
if (nfs_get_option_ul(args, &option))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->acregmax = option;
|
ctx->acregmax = option;
|
||||||
break;
|
break;
|
||||||
case Opt_acdirmin:
|
case Opt_acdirmin:
|
||||||
if (nfs_get_option_ul(args, &option))
|
if (nfs_get_option_ul(args, &option))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->acdirmin = option;
|
ctx->acdirmin = option;
|
||||||
break;
|
break;
|
||||||
case Opt_acdirmax:
|
case Opt_acdirmax:
|
||||||
if (nfs_get_option_ul(args, &option))
|
if (nfs_get_option_ul(args, &option))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->acdirmax = option;
|
ctx->acdirmax = option;
|
||||||
break;
|
break;
|
||||||
case Opt_actimeo:
|
case Opt_actimeo:
|
||||||
if (nfs_get_option_ul(args, &option))
|
if (nfs_get_option_ul(args, &option))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->acregmin = ctx->acregmax =
|
ctx->acregmin = ctx->acregmax =
|
||||||
ctx->acdirmin = ctx->acdirmax = option;
|
ctx->acdirmin = ctx->acdirmax = option;
|
||||||
break;
|
break;
|
||||||
case Opt_namelen:
|
case Opt_namelen:
|
||||||
if (nfs_get_option_ul(args, &option))
|
if (nfs_get_option_ul(args, &option))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->namlen = option;
|
ctx->namlen = option;
|
||||||
break;
|
break;
|
||||||
case Opt_mountport:
|
case Opt_mountport:
|
||||||
if (nfs_get_option_ul(args, &option) ||
|
if (nfs_get_option_ul(args, &option) ||
|
||||||
option > USHRT_MAX)
|
option > USHRT_MAX)
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->mount_server.port = option;
|
ctx->mount_server.port = option;
|
||||||
break;
|
break;
|
||||||
case Opt_mountvers:
|
case Opt_mountvers:
|
||||||
if (nfs_get_option_ul(args, &option) ||
|
if (nfs_get_option_ul(args, &option) ||
|
||||||
option < NFS_MNT_VERSION ||
|
option < NFS_MNT_VERSION ||
|
||||||
option > NFS_MNT3_VERSION)
|
option > NFS_MNT3_VERSION)
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->mount_server.version = option;
|
ctx->mount_server.version = option;
|
||||||
break;
|
break;
|
||||||
case Opt_minorversion:
|
case Opt_minorversion:
|
||||||
if (nfs_get_option_ul(args, &option))
|
if (nfs_get_option_ul(args, &option))
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
if (option > NFS4_MAX_MINOR_VERSION)
|
if (option > NFS4_MAX_MINOR_VERSION)
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
ctx->minorversion = option;
|
ctx->minorversion = option;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* options that take text values
|
* options that take text values
|
||||||
*/
|
*/
|
||||||
case Opt_nfsvers:
|
case Opt_nfsvers:
|
||||||
string = match_strdup(args);
|
string = match_strdup(args);
|
||||||
if (string == NULL)
|
if (string == NULL)
|
||||||
goto out_nomem;
|
goto out_nomem;
|
||||||
rc = nfs_parse_version_string(string, ctx, args);
|
rc = nfs_parse_version_string(string, ctx, args);
|
||||||
kfree(string);
|
kfree(string);
|
||||||
if (!rc)
|
if (!rc)
|
||||||
goto out_invalid_value;
|
goto out_invalid_value;
|
||||||
break;
|
break;
|
||||||
case Opt_sec:
|
case Opt_sec:
|
||||||
string = match_strdup(args);
|
string = match_strdup(args);
|
||||||
if (string == NULL)
|
if (string == NULL)
|
||||||
goto out_nomem;
|
goto out_nomem;
|
||||||
rc = nfs_parse_security_flavors(string, ctx);
|
rc = nfs_parse_security_flavors(string, ctx);
|
||||||
kfree(string);
|
kfree(string);
|
||||||
if (!rc) {
|
if (!rc) {
|
||||||
dfprintk(MOUNT, "NFS: unrecognized "
|
dfprintk(MOUNT, "NFS: unrecognized "
|
||||||
"security flavor\n");
|
"security flavor\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Opt_proto:
|
case Opt_proto:
|
||||||
string = match_strdup(args);
|
string = match_strdup(args);
|
||||||
if (string == NULL)
|
if (string == NULL)
|
||||||
goto out_nomem;
|
goto out_nomem;
|
||||||
token = match_token(string,
|
token = match_token(string,
|
||||||
nfs_xprt_protocol_tokens, args);
|
nfs_xprt_protocol_tokens, args);
|
||||||
|
|
||||||
ctx->protofamily = AF_INET;
|
ctx->protofamily = AF_INET;
|
||||||
switch (token) {
|
switch (token) {
|
||||||
case Opt_xprt_udp6:
|
case Opt_xprt_udp6:
|
||||||
ctx->protofamily = AF_INET6;
|
ctx->protofamily = AF_INET6;
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case Opt_xprt_udp:
|
case Opt_xprt_udp:
|
||||||
ctx->flags &= ~NFS_MOUNT_TCP;
|
ctx->flags &= ~NFS_MOUNT_TCP;
|
||||||
ctx->nfs_server.protocol = XPRT_TRANSPORT_UDP;
|
ctx->nfs_server.protocol = XPRT_TRANSPORT_UDP;
|
||||||
break;
|
|
||||||
case Opt_xprt_tcp6:
|
|
||||||
ctx->protofamily = AF_INET6;
|
|
||||||
/* fall through */
|
|
||||||
case Opt_xprt_tcp:
|
|
||||||
ctx->flags |= NFS_MOUNT_TCP;
|
|
||||||
ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP;
|
|
||||||
break;
|
|
||||||
case Opt_xprt_rdma6:
|
|
||||||
ctx->protofamily = AF_INET6;
|
|
||||||
/* fall through */
|
|
||||||
case Opt_xprt_rdma:
|
|
||||||
/* vector side protocols to TCP */
|
|
||||||
ctx->flags |= NFS_MOUNT_TCP;
|
|
||||||
ctx->nfs_server.protocol = XPRT_TRANSPORT_RDMA;
|
|
||||||
xprt_load_transport(string);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
dfprintk(MOUNT, "NFS: unrecognized "
|
|
||||||
"transport protocol\n");
|
|
||||||
kfree(string);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
kfree(string);
|
|
||||||
break;
|
break;
|
||||||
case Opt_mountproto:
|
case Opt_xprt_tcp6:
|
||||||
string = match_strdup(args);
|
ctx->protofamily = AF_INET6;
|
||||||
if (string == NULL)
|
/* fall through */
|
||||||
goto out_nomem;
|
case Opt_xprt_tcp:
|
||||||
token = match_token(string,
|
ctx->flags |= NFS_MOUNT_TCP;
|
||||||
nfs_xprt_protocol_tokens, args);
|
ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP;
|
||||||
|
break;
|
||||||
|
case Opt_xprt_rdma6:
|
||||||
|
ctx->protofamily = AF_INET6;
|
||||||
|
/* fall through */
|
||||||
|
case Opt_xprt_rdma:
|
||||||
|
/* vector side protocols to TCP */
|
||||||
|
ctx->flags |= NFS_MOUNT_TCP;
|
||||||
|
ctx->nfs_server.protocol = XPRT_TRANSPORT_RDMA;
|
||||||
|
xprt_load_transport(string);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dfprintk(MOUNT, "NFS: unrecognized "
|
||||||
|
"transport protocol\n");
|
||||||
kfree(string);
|
kfree(string);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
kfree(string);
|
||||||
|
break;
|
||||||
|
case Opt_mountproto:
|
||||||
|
string = match_strdup(args);
|
||||||
|
if (string == NULL)
|
||||||
|
goto out_nomem;
|
||||||
|
token = match_token(string,
|
||||||
|
nfs_xprt_protocol_tokens, args);
|
||||||
|
kfree(string);
|
||||||
|
|
||||||
ctx->mountfamily = AF_INET;
|
ctx->mountfamily = AF_INET;
|
||||||
switch (token) {
|
switch (token) {
|
||||||
case Opt_xprt_udp6:
|
case Opt_xprt_udp6:
|
||||||
ctx->mountfamily = AF_INET6;
|
ctx->mountfamily = AF_INET6;
|
||||||
/* fall through */
|
/* fall through */
|
||||||
case Opt_xprt_udp:
|
case Opt_xprt_udp:
|
||||||
ctx->mount_server.protocol = XPRT_TRANSPORT_UDP;
|
ctx->mount_server.protocol = XPRT_TRANSPORT_UDP;
|
||||||
break;
|
|
||||||
case Opt_xprt_tcp6:
|
|
||||||
ctx->mountfamily = AF_INET6;
|
|
||||||
/* fall through */
|
|
||||||
case Opt_xprt_tcp:
|
|
||||||
ctx->mount_server.protocol = XPRT_TRANSPORT_TCP;
|
|
||||||
break;
|
|
||||||
case Opt_xprt_rdma: /* not used for side protocols */
|
|
||||||
default:
|
|
||||||
dfprintk(MOUNT, "NFS: unrecognized "
|
|
||||||
"transport protocol\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case Opt_addr:
|
case Opt_xprt_tcp6:
|
||||||
string = match_strdup(args);
|
ctx->mountfamily = AF_INET6;
|
||||||
if (string == NULL)
|
/* fall through */
|
||||||
goto out_nomem;
|
case Opt_xprt_tcp:
|
||||||
ctx->nfs_server.addrlen =
|
ctx->mount_server.protocol = XPRT_TRANSPORT_TCP;
|
||||||
rpc_pton(ctx->net, string, strlen(string),
|
|
||||||
(struct sockaddr *)
|
|
||||||
&ctx->nfs_server.address,
|
|
||||||
sizeof(ctx->nfs_server.address));
|
|
||||||
kfree(string);
|
|
||||||
if (ctx->nfs_server.addrlen == 0)
|
|
||||||
goto out_invalid_address;
|
|
||||||
break;
|
break;
|
||||||
case Opt_clientaddr:
|
case Opt_xprt_rdma: /* not used for side protocols */
|
||||||
if (nfs_get_option_str(args, &ctx->client_address))
|
default:
|
||||||
goto out_nomem;
|
dfprintk(MOUNT, "NFS: unrecognized "
|
||||||
|
"transport protocol\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Opt_addr:
|
||||||
|
string = match_strdup(args);
|
||||||
|
if (string == NULL)
|
||||||
|
goto out_nomem;
|
||||||
|
ctx->nfs_server.addrlen =
|
||||||
|
rpc_pton(ctx->net, string, strlen(string),
|
||||||
|
(struct sockaddr *)
|
||||||
|
&ctx->nfs_server.address,
|
||||||
|
sizeof(ctx->nfs_server.address));
|
||||||
|
kfree(string);
|
||||||
|
if (ctx->nfs_server.addrlen == 0)
|
||||||
|
goto out_invalid_address;
|
||||||
|
break;
|
||||||
|
case Opt_clientaddr:
|
||||||
|
if (nfs_get_option_str(args, &ctx->client_address))
|
||||||
|
goto out_nomem;
|
||||||
|
break;
|
||||||
|
case Opt_mounthost:
|
||||||
|
if (nfs_get_option_str(args,
|
||||||
|
&ctx->mount_server.hostname))
|
||||||
|
goto out_nomem;
|
||||||
|
break;
|
||||||
|
case Opt_mountaddr:
|
||||||
|
string = match_strdup(args);
|
||||||
|
if (string == NULL)
|
||||||
|
goto out_nomem;
|
||||||
|
ctx->mount_server.addrlen =
|
||||||
|
rpc_pton(ctx->net, string, strlen(string),
|
||||||
|
(struct sockaddr *)
|
||||||
|
&ctx->mount_server.address,
|
||||||
|
sizeof(ctx->mount_server.address));
|
||||||
|
kfree(string);
|
||||||
|
if (ctx->mount_server.addrlen == 0)
|
||||||
|
goto out_invalid_address;
|
||||||
|
break;
|
||||||
|
case Opt_nconnect:
|
||||||
|
if (nfs_get_option_ul_bound(args, &option, 1, NFS_MAX_CONNECTIONS))
|
||||||
|
goto out_invalid_value;
|
||||||
|
ctx->nfs_server.nconnect = option;
|
||||||
|
break;
|
||||||
|
case Opt_lookupcache:
|
||||||
|
string = match_strdup(args);
|
||||||
|
if (string == NULL)
|
||||||
|
goto out_nomem;
|
||||||
|
token = match_token(string,
|
||||||
|
nfs_lookupcache_tokens, args);
|
||||||
|
kfree(string);
|
||||||
|
switch (token) {
|
||||||
|
case Opt_lookupcache_all:
|
||||||
|
ctx->flags &= ~(NFS_MOUNT_LOOKUP_CACHE_NONEG|NFS_MOUNT_LOOKUP_CACHE_NONE);
|
||||||
break;
|
break;
|
||||||
case Opt_mounthost:
|
case Opt_lookupcache_positive:
|
||||||
if (nfs_get_option_str(args,
|
ctx->flags &= ~NFS_MOUNT_LOOKUP_CACHE_NONE;
|
||||||
&ctx->mount_server.hostname))
|
ctx->flags |= NFS_MOUNT_LOOKUP_CACHE_NONEG;
|
||||||
goto out_nomem;
|
|
||||||
break;
|
break;
|
||||||
case Opt_mountaddr:
|
case Opt_lookupcache_none:
|
||||||
string = match_strdup(args);
|
ctx->flags |= NFS_MOUNT_LOOKUP_CACHE_NONEG|NFS_MOUNT_LOOKUP_CACHE_NONE;
|
||||||
if (string == NULL)
|
|
||||||
goto out_nomem;
|
|
||||||
ctx->mount_server.addrlen =
|
|
||||||
rpc_pton(ctx->net, string, strlen(string),
|
|
||||||
(struct sockaddr *)
|
|
||||||
&ctx->mount_server.address,
|
|
||||||
sizeof(ctx->mount_server.address));
|
|
||||||
kfree(string);
|
|
||||||
if (ctx->mount_server.addrlen == 0)
|
|
||||||
goto out_invalid_address;
|
|
||||||
break;
|
break;
|
||||||
case Opt_nconnect:
|
default:
|
||||||
if (nfs_get_option_ul_bound(args, &option, 1, NFS_MAX_CONNECTIONS))
|
dfprintk(MOUNT, "NFS: invalid "
|
||||||
goto out_invalid_value;
|
"lookupcache argument\n");
|
||||||
ctx->nfs_server.nconnect = option;
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Opt_fscache_uniq:
|
||||||
|
if (nfs_get_option_str(args, &ctx->fscache_uniq))
|
||||||
|
goto out_nomem;
|
||||||
|
ctx->options |= NFS_OPTION_FSCACHE;
|
||||||
|
break;
|
||||||
|
case Opt_local_lock:
|
||||||
|
string = match_strdup(args);
|
||||||
|
if (string == NULL)
|
||||||
|
goto out_nomem;
|
||||||
|
token = match_token(string, nfs_local_lock_tokens,
|
||||||
|
args);
|
||||||
|
kfree(string);
|
||||||
|
switch (token) {
|
||||||
|
case Opt_local_lock_all:
|
||||||
|
ctx->flags |= (NFS_MOUNT_LOCAL_FLOCK |
|
||||||
|
NFS_MOUNT_LOCAL_FCNTL);
|
||||||
break;
|
break;
|
||||||
case Opt_lookupcache:
|
case Opt_local_lock_flock:
|
||||||
string = match_strdup(args);
|
ctx->flags |= NFS_MOUNT_LOCAL_FLOCK;
|
||||||
if (string == NULL)
|
|
||||||
goto out_nomem;
|
|
||||||
token = match_token(string,
|
|
||||||
nfs_lookupcache_tokens, args);
|
|
||||||
kfree(string);
|
|
||||||
switch (token) {
|
|
||||||
case Opt_lookupcache_all:
|
|
||||||
ctx->flags &= ~(NFS_MOUNT_LOOKUP_CACHE_NONEG|NFS_MOUNT_LOOKUP_CACHE_NONE);
|
|
||||||
break;
|
|
||||||
case Opt_lookupcache_positive:
|
|
||||||
ctx->flags &= ~NFS_MOUNT_LOOKUP_CACHE_NONE;
|
|
||||||
ctx->flags |= NFS_MOUNT_LOOKUP_CACHE_NONEG;
|
|
||||||
break;
|
|
||||||
case Opt_lookupcache_none:
|
|
||||||
ctx->flags |= NFS_MOUNT_LOOKUP_CACHE_NONEG|NFS_MOUNT_LOOKUP_CACHE_NONE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
dfprintk(MOUNT, "NFS: invalid "
|
|
||||||
"lookupcache argument\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case Opt_fscache_uniq:
|
case Opt_local_lock_posix:
|
||||||
if (nfs_get_option_str(args, &ctx->fscache_uniq))
|
ctx->flags |= NFS_MOUNT_LOCAL_FCNTL;
|
||||||
goto out_nomem;
|
|
||||||
ctx->options |= NFS_OPTION_FSCACHE;
|
|
||||||
break;
|
break;
|
||||||
case Opt_local_lock:
|
case Opt_local_lock_none:
|
||||||
string = match_strdup(args);
|
ctx->flags &= ~(NFS_MOUNT_LOCAL_FLOCK |
|
||||||
if (string == NULL)
|
NFS_MOUNT_LOCAL_FCNTL);
|
||||||
goto out_nomem;
|
|
||||||
token = match_token(string, nfs_local_lock_tokens,
|
|
||||||
args);
|
|
||||||
kfree(string);
|
|
||||||
switch (token) {
|
|
||||||
case Opt_local_lock_all:
|
|
||||||
ctx->flags |= (NFS_MOUNT_LOCAL_FLOCK |
|
|
||||||
NFS_MOUNT_LOCAL_FCNTL);
|
|
||||||
break;
|
|
||||||
case Opt_local_lock_flock:
|
|
||||||
ctx->flags |= NFS_MOUNT_LOCAL_FLOCK;
|
|
||||||
break;
|
|
||||||
case Opt_local_lock_posix:
|
|
||||||
ctx->flags |= NFS_MOUNT_LOCAL_FCNTL;
|
|
||||||
break;
|
|
||||||
case Opt_local_lock_none:
|
|
||||||
ctx->flags &= ~(NFS_MOUNT_LOCAL_FLOCK |
|
|
||||||
NFS_MOUNT_LOCAL_FCNTL);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
dfprintk(MOUNT, "NFS: invalid "
|
|
||||||
"local_lock argument\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
dfprintk(MOUNT, "NFS: invalid "
|
||||||
|
"local_lock argument\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Special options
|
* Special options
|
||||||
*/
|
*/
|
||||||
case Opt_sloppy:
|
case Opt_sloppy:
|
||||||
ctx->sloppy = 1;
|
ctx->sloppy = 1;
|
||||||
dfprintk(MOUNT, "NFS: relaxing parsing rules\n");
|
dfprintk(MOUNT, "NFS: relaxing parsing rules\n");
|
||||||
break;
|
break;
|
||||||
case Opt_userspace:
|
case Opt_userspace:
|
||||||
case Opt_deprecated:
|
case Opt_deprecated:
|
||||||
dfprintk(MOUNT, "NFS: ignoring mount option "
|
dfprintk(MOUNT, "NFS: ignoring mount option "
|
||||||
"'%s'\n", p);
|
"'%s'\n", p);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
dfprintk(MOUNT, "NFS: unrecognized mount option "
|
dfprintk(MOUNT, "NFS: unrecognized mount option "
|
||||||
"'%s'\n", p);
|
"'%s'\n", p);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue