Lines Matching +full:foo +full:- +full:supply
1 // SPDX-License-Identifier: GPL-2.0-only
322 * Sanity-check a server address provided by the mount command.
329 switch (addr->ss_family) { in nfs_verify_server_address()
332 return sa->sin_addr.s_addr != htonl(INADDR_ANY); in nfs_verify_server_address()
335 struct in6_addr *sa = &((struct sockaddr_in6 *)addr)->sin6_addr; in nfs_verify_server_address()
351 if (ctx->version == 4) in nfs_server_transport_udp_invalid()
363 switch (ctx->nfs_server.protocol) { in nfs_validate_transport_protocol()
372 ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP; in nfs_validate_transport_protocol()
375 if (ctx->xprtsec.policy != RPC_XPRTSEC_NONE) in nfs_validate_transport_protocol()
376 switch (ctx->nfs_server.protocol) { in nfs_validate_transport_protocol()
378 ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP_TLS; in nfs_validate_transport_protocol()
397 if (ctx->mount_server.protocol == XPRT_TRANSPORT_UDP || in nfs_set_mount_transport_protocol()
398 ctx->mount_server.protocol == XPRT_TRANSPORT_TCP) in nfs_set_mount_transport_protocol()
400 switch (ctx->nfs_server.protocol) { in nfs_set_mount_transport_protocol()
402 ctx->mount_server.protocol = XPRT_TRANSPORT_UDP; in nfs_set_mount_transport_protocol()
406 ctx->mount_server.protocol = XPRT_TRANSPORT_TCP; in nfs_set_mount_transport_protocol()
419 unsigned int max_flavor_len = ARRAY_SIZE(auth_info->flavors); in nfs_auth_info_add()
422 for (i = 0; i < auth_info->flavor_len; i++) { in nfs_auth_info_add()
423 if (flavor == auth_info->flavors[i]) in nfs_auth_info_add()
427 if (auth_info->flavor_len + 1 >= max_flavor_len) in nfs_auth_info_add()
430 auth_info->flavors[auth_info->flavor_len++] = flavor; in nfs_auth_info_add()
442 char *string = param->string, *p; in nfs_parse_security_flavors()
445 trace_nfs_mount_assign(param->key, string); in nfs_parse_security_flavors()
450 switch (lookup_constant(nfs_secflavor_tokens, p, -1)) { in nfs_parse_security_flavors()
488 ret = nfs_auth_info_add(fc, &ctx->auth_info, pseudoflavor); in nfs_parse_security_flavors()
501 trace_nfs_mount_assign(param->key, param->string); in nfs_parse_xprtsec_policy()
503 switch (lookup_constant(nfs_xprtsec_policies, param->string, -1)) { in nfs_parse_xprtsec_policy()
505 ctx->xprtsec.policy = RPC_XPRTSEC_NONE; in nfs_parse_xprtsec_policy()
508 ctx->xprtsec.policy = RPC_XPRTSEC_TLS_ANON; in nfs_parse_xprtsec_policy()
511 ctx->xprtsec.policy = RPC_XPRTSEC_TLS_X509; in nfs_parse_xprtsec_policy()
524 ctx->flags &= ~NFS_MOUNT_VER3; in nfs_parse_version_string()
525 switch (lookup_constant(nfs_vers_tokens, string, -1)) { in nfs_parse_version_string()
527 ctx->version = 2; in nfs_parse_version_string()
530 ctx->flags |= NFS_MOUNT_VER3; in nfs_parse_version_string()
531 ctx->version = 3; in nfs_parse_version_string()
535 * the mount program should always supply in nfs_parse_version_string()
538 ctx->version = 4; in nfs_parse_version_string()
541 ctx->version = 4; in nfs_parse_version_string()
542 ctx->minorversion = 0; in nfs_parse_version_string()
545 ctx->version = 4; in nfs_parse_version_string()
546 ctx->minorversion = 1; in nfs_parse_version_string()
549 ctx->version = 4; in nfs_parse_version_string()
550 ctx->minorversion = 2; in nfs_parse_version_string()
568 if (test_bit(KEY_FLAG_REVOKED, &key->flags) || in nfs_tls_key_verify()
569 test_bit(KEY_FLAG_INVALIDATED, &key->flags)) { in nfs_tls_key_verify()
571 error = -EKEYREVOKED; in nfs_tls_key_verify()
580 return -ENOENT; in nfs_tls_key_verify()
600 return (opt == -ENOPARAM && ctx->sloppy) ? 1 : opt; in nfs_fs_context_parse_param()
602 if (fc->security) in nfs_fs_context_parse_param()
603 ctx->has_sec_mnt_opts = 1; in nfs_fs_context_parse_param()
607 if (fc->source) in nfs_fs_context_parse_param()
609 fc->source = param->string; in nfs_fs_context_parse_param()
610 param->string = NULL; in nfs_fs_context_parse_param()
614 * boolean options: foo/nofoo in nfs_fs_context_parse_param()
617 ctx->flags |= NFS_MOUNT_SOFT; in nfs_fs_context_parse_param()
618 ctx->flags &= ~NFS_MOUNT_SOFTERR; in nfs_fs_context_parse_param()
621 ctx->flags |= NFS_MOUNT_SOFTERR | NFS_MOUNT_SOFTREVAL; in nfs_fs_context_parse_param()
622 ctx->flags &= ~NFS_MOUNT_SOFT; in nfs_fs_context_parse_param()
625 ctx->flags &= ~(NFS_MOUNT_SOFT | in nfs_fs_context_parse_param()
631 ctx->flags &= ~NFS_MOUNT_SOFTREVAL; in nfs_fs_context_parse_param()
633 ctx->flags |= NFS_MOUNT_SOFTREVAL; in nfs_fs_context_parse_param()
637 ctx->flags &= ~NFS_MOUNT_POSIX; in nfs_fs_context_parse_param()
639 ctx->flags |= NFS_MOUNT_POSIX; in nfs_fs_context_parse_param()
643 ctx->flags |= NFS_MOUNT_NOCTO; in nfs_fs_context_parse_param()
645 ctx->flags &= ~NFS_MOUNT_NOCTO; in nfs_fs_context_parse_param()
649 ctx->flags &= ~NFS_MOUNT_TRUNK_DISCOVERY; in nfs_fs_context_parse_param()
651 ctx->flags |= NFS_MOUNT_TRUNK_DISCOVERY; in nfs_fs_context_parse_param()
655 ctx->flags |= NFS_MOUNT_NO_ALIGNWRITE; in nfs_fs_context_parse_param()
657 ctx->flags &= ~NFS_MOUNT_NO_ALIGNWRITE; in nfs_fs_context_parse_param()
661 ctx->flags |= NFS_MOUNT_NOAC; in nfs_fs_context_parse_param()
663 ctx->flags &= ~NFS_MOUNT_NOAC; in nfs_fs_context_parse_param()
667 ctx->lock_status = NFS_LOCK_NOLOCK; in nfs_fs_context_parse_param()
668 ctx->flags |= NFS_MOUNT_NONLM; in nfs_fs_context_parse_param()
669 ctx->flags |= (NFS_MOUNT_LOCAL_FLOCK | NFS_MOUNT_LOCAL_FCNTL); in nfs_fs_context_parse_param()
671 ctx->lock_status = NFS_LOCK_LOCK; in nfs_fs_context_parse_param()
672 ctx->flags &= ~NFS_MOUNT_NONLM; in nfs_fs_context_parse_param()
673 ctx->flags &= ~(NFS_MOUNT_LOCAL_FLOCK | NFS_MOUNT_LOCAL_FCNTL); in nfs_fs_context_parse_param()
677 ctx->flags &= ~NFS_MOUNT_TCP; in nfs_fs_context_parse_param()
678 ctx->nfs_server.protocol = XPRT_TRANSPORT_UDP; in nfs_fs_context_parse_param()
682 ctx->flags |= NFS_MOUNT_TCP; /* for side protocols */ in nfs_fs_context_parse_param()
683 ret = xprt_find_transport_ident(param->key); in nfs_fs_context_parse_param()
686 ctx->nfs_server.protocol = ret; in nfs_fs_context_parse_param()
690 ctx->flags |= NFS_MOUNT_NOACL; in nfs_fs_context_parse_param()
692 ctx->flags &= ~NFS_MOUNT_NOACL; in nfs_fs_context_parse_param()
696 ctx->flags &= ~NFS_MOUNT_FORCE_RDIRPLUS; in nfs_fs_context_parse_param()
697 ctx->flags |= NFS_MOUNT_NORDIRPLUS; in nfs_fs_context_parse_param()
698 } else if (!param->string) { in nfs_fs_context_parse_param()
699 ctx->flags &= ~(NFS_MOUNT_NORDIRPLUS | NFS_MOUNT_FORCE_RDIRPLUS); in nfs_fs_context_parse_param()
701 switch (lookup_constant(nfs_rdirplus_tokens, param->string, -1)) { in nfs_fs_context_parse_param()
703 ctx->flags &= ~NFS_MOUNT_FORCE_RDIRPLUS; in nfs_fs_context_parse_param()
704 ctx->flags |= NFS_MOUNT_NORDIRPLUS; in nfs_fs_context_parse_param()
707 ctx->flags &= ~NFS_MOUNT_NORDIRPLUS; in nfs_fs_context_parse_param()
708 ctx->flags |= NFS_MOUNT_FORCE_RDIRPLUS; in nfs_fs_context_parse_param()
717 ctx->flags |= NFS_MOUNT_UNSHARED; in nfs_fs_context_parse_param()
719 ctx->flags &= ~NFS_MOUNT_UNSHARED; in nfs_fs_context_parse_param()
723 ctx->flags |= NFS_MOUNT_NORESVPORT; in nfs_fs_context_parse_param()
725 ctx->flags &= ~NFS_MOUNT_NORESVPORT; in nfs_fs_context_parse_param()
729 ctx->options &= ~NFS_OPTION_FSCACHE; in nfs_fs_context_parse_param()
731 ctx->options |= NFS_OPTION_FSCACHE; in nfs_fs_context_parse_param()
732 kfree(ctx->fscache_uniq); in nfs_fs_context_parse_param()
733 ctx->fscache_uniq = NULL; in nfs_fs_context_parse_param()
736 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
737 ctx->options |= NFS_OPTION_FSCACHE; in nfs_fs_context_parse_param()
738 kfree(ctx->fscache_uniq); in nfs_fs_context_parse_param()
739 ctx->fscache_uniq = param->string; in nfs_fs_context_parse_param()
740 param->string = NULL; in nfs_fs_context_parse_param()
744 ctx->options &= ~NFS_OPTION_MIGRATION; in nfs_fs_context_parse_param()
746 ctx->options |= NFS_OPTION_MIGRATION; in nfs_fs_context_parse_param()
755 ctx->nfs_server.port = result.uint_32; in nfs_fs_context_parse_param()
758 ctx->rsize = result.uint_32; in nfs_fs_context_parse_param()
761 ctx->wsize = result.uint_32; in nfs_fs_context_parse_param()
764 ctx->bsize = result.uint_32; in nfs_fs_context_parse_param()
769 ctx->timeo = result.uint_32; in nfs_fs_context_parse_param()
774 ctx->retrans = result.uint_32; in nfs_fs_context_parse_param()
777 ctx->acregmin = result.uint_32; in nfs_fs_context_parse_param()
780 ctx->acregmax = result.uint_32; in nfs_fs_context_parse_param()
783 ctx->acdirmin = result.uint_32; in nfs_fs_context_parse_param()
786 ctx->acdirmax = result.uint_32; in nfs_fs_context_parse_param()
789 ctx->acregmin = result.uint_32; in nfs_fs_context_parse_param()
790 ctx->acregmax = result.uint_32; in nfs_fs_context_parse_param()
791 ctx->acdirmin = result.uint_32; in nfs_fs_context_parse_param()
792 ctx->acdirmax = result.uint_32; in nfs_fs_context_parse_param()
795 ctx->namlen = result.uint_32; in nfs_fs_context_parse_param()
800 ctx->mount_server.port = result.uint_32; in nfs_fs_context_parse_param()
806 ctx->mount_server.version = result.uint_32; in nfs_fs_context_parse_param()
811 ctx->minorversion = result.uint_32; in nfs_fs_context_parse_param()
818 ret = nfs_parse_version_string(fc, param->key + 1); in nfs_fs_context_parse_param()
823 if (!param->string) in nfs_fs_context_parse_param()
825 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
826 ret = nfs_parse_version_string(fc, param->string); in nfs_fs_context_parse_param()
844 ctx->xprtsec.cert_serial = result.int_32; in nfs_fs_context_parse_param()
850 ctx->xprtsec.privkey_serial = result.int_32; in nfs_fs_context_parse_param()
854 if (!param->string) in nfs_fs_context_parse_param()
856 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
858 switch (lookup_constant(nfs_xprt_protocol_tokens, param->string, -1)) { in nfs_fs_context_parse_param()
863 ctx->flags &= ~NFS_MOUNT_TCP; in nfs_fs_context_parse_param()
864 ctx->nfs_server.protocol = XPRT_TRANSPORT_UDP; in nfs_fs_context_parse_param()
870 ctx->flags |= NFS_MOUNT_TCP; in nfs_fs_context_parse_param()
871 ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP; in nfs_fs_context_parse_param()
878 ctx->flags |= NFS_MOUNT_TCP; in nfs_fs_context_parse_param()
879 ret = xprt_find_transport_ident(param->string); in nfs_fs_context_parse_param()
882 ctx->nfs_server.protocol = ret; in nfs_fs_context_parse_param()
888 ctx->protofamily = protofamily; in nfs_fs_context_parse_param()
892 if (!param->string) in nfs_fs_context_parse_param()
894 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
896 switch (lookup_constant(nfs_xprt_protocol_tokens, param->string, -1)) { in nfs_fs_context_parse_param()
901 ctx->mount_server.protocol = XPRT_TRANSPORT_UDP; in nfs_fs_context_parse_param()
907 ctx->mount_server.protocol = XPRT_TRANSPORT_TCP; in nfs_fs_context_parse_param()
913 ctx->mountfamily = mountfamily; in nfs_fs_context_parse_param()
917 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
918 len = rpc_pton(fc->net_ns, param->string, param->size, in nfs_fs_context_parse_param()
919 &ctx->nfs_server.address, in nfs_fs_context_parse_param()
920 sizeof(ctx->nfs_server._address)); in nfs_fs_context_parse_param()
923 ctx->nfs_server.addrlen = len; in nfs_fs_context_parse_param()
926 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
927 kfree(ctx->client_address); in nfs_fs_context_parse_param()
928 ctx->client_address = param->string; in nfs_fs_context_parse_param()
929 param->string = NULL; in nfs_fs_context_parse_param()
932 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
933 kfree(ctx->mount_server.hostname); in nfs_fs_context_parse_param()
934 ctx->mount_server.hostname = param->string; in nfs_fs_context_parse_param()
935 param->string = NULL; in nfs_fs_context_parse_param()
938 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
939 len = rpc_pton(fc->net_ns, param->string, param->size, in nfs_fs_context_parse_param()
940 &ctx->mount_server.address, in nfs_fs_context_parse_param()
941 sizeof(ctx->mount_server._address)); in nfs_fs_context_parse_param()
944 ctx->mount_server.addrlen = len; in nfs_fs_context_parse_param()
947 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
950 ctx->nfs_server.nconnect = result.uint_32; in nfs_fs_context_parse_param()
953 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
956 ctx->nfs_server.max_connect = result.uint_32; in nfs_fs_context_parse_param()
959 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
962 if (fc->net_ns != &init_net) in nfs_fs_context_parse_param()
963 ctx->flags |= NFS_MOUNT_NETUNREACH_FATAL; in nfs_fs_context_parse_param()
965 ctx->flags &= ~NFS_MOUNT_NETUNREACH_FATAL; in nfs_fs_context_parse_param()
968 ctx->flags |= NFS_MOUNT_NETUNREACH_FATAL; in nfs_fs_context_parse_param()
971 ctx->flags &= ~NFS_MOUNT_NETUNREACH_FATAL; in nfs_fs_context_parse_param()
978 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
981 ctx->flags &= ~(NFS_MOUNT_LOOKUP_CACHE_NONEG|NFS_MOUNT_LOOKUP_CACHE_NONE); in nfs_fs_context_parse_param()
984 ctx->flags &= ~NFS_MOUNT_LOOKUP_CACHE_NONE; in nfs_fs_context_parse_param()
985 ctx->flags |= NFS_MOUNT_LOOKUP_CACHE_NONEG; in nfs_fs_context_parse_param()
988 ctx->flags |= NFS_MOUNT_LOOKUP_CACHE_NONEG|NFS_MOUNT_LOOKUP_CACHE_NONE; in nfs_fs_context_parse_param()
995 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
998 ctx->flags |= (NFS_MOUNT_LOCAL_FLOCK | in nfs_fs_context_parse_param()
1002 ctx->flags |= NFS_MOUNT_LOCAL_FLOCK; in nfs_fs_context_parse_param()
1005 ctx->flags |= NFS_MOUNT_LOCAL_FCNTL; in nfs_fs_context_parse_param()
1008 ctx->flags &= ~(NFS_MOUNT_LOCAL_FLOCK | in nfs_fs_context_parse_param()
1016 trace_nfs_mount_assign(param->key, param->string); in nfs_fs_context_parse_param()
1019 ctx->flags &= in nfs_fs_context_parse_param()
1023 ctx->flags |= NFS_MOUNT_WRITE_EAGER; in nfs_fs_context_parse_param()
1024 ctx->flags &= ~NFS_MOUNT_WRITE_WAIT; in nfs_fs_context_parse_param()
1027 ctx->flags |= in nfs_fs_context_parse_param()
1039 ctx->sloppy = true; in nfs_fs_context_parse_param()
1050 return nfs_invalf(fc, "NFS: Value for '%s' out of range", param->key); in nfs_fs_context_parse_param()
1056 * Split fc->source into "hostname:export_path".
1068 const char *dev_name = fc->source; in nfs_parse_source()
1073 return -EINVAL; in nfs_parse_source()
1081 len = end - dev_name; in nfs_parse_source()
1089 len = end - dev_name; in nfs_parse_source()
1094 len = comma - dev_name; in nfs_parse_source()
1100 kfree(ctx->nfs_server.hostname); in nfs_parse_source()
1103 ctx->nfs_server.hostname = kmemdup_nul(dev_name, len, GFP_KERNEL); in nfs_parse_source()
1104 if (!ctx->nfs_server.hostname) in nfs_parse_source()
1109 ctx->nfs_server.export_path = kmemdup_nul(end, len, GFP_KERNEL); in nfs_parse_source()
1110 if (!ctx->nfs_server.export_path) in nfs_parse_source()
1113 trace_nfs_mount_path(ctx->nfs_server.export_path); in nfs_parse_source()
1120 return -ENOMEM; in nfs_parse_source()
1123 return -ENAMETOOLONG; in nfs_parse_source()
1126 return -ENAMETOOLONG; in nfs_parse_source()
1131 return fc->root != NULL; in is_remount_fc()
1136 * - fills in the mount root filehandle
1154 struct nfs_fh *mntfh = ctx->mntfh; in nfs23_parse_monolithic()
1155 struct sockaddr_storage *sap = &ctx->nfs_server._address; in nfs23_parse_monolithic()
1162 ctx->version = NFS_DEFAULT_VERSION; in nfs23_parse_monolithic()
1163 switch (data->version) { in nfs23_parse_monolithic()
1165 data->namlen = 0; in nfs23_parse_monolithic()
1168 data->bsize = 0; in nfs23_parse_monolithic()
1171 if (data->flags & NFS_MOUNT_VER3) in nfs23_parse_monolithic()
1173 data->root.size = NFS2_FHSIZE; in nfs23_parse_monolithic()
1174 memcpy(data->root.data, data->old_root.data, NFS2_FHSIZE); in nfs23_parse_monolithic()
1179 if (data->flags & NFS_MOUNT_SECFLAVOUR) in nfs23_parse_monolithic()
1183 memset(data->context, 0, sizeof(data->context)); in nfs23_parse_monolithic()
1186 if (data->flags & NFS_MOUNT_VER3) { in nfs23_parse_monolithic()
1187 if (data->root.size > NFS3_FHSIZE || data->root.size == 0) in nfs23_parse_monolithic()
1189 mntfh->size = data->root.size; in nfs23_parse_monolithic()
1190 ctx->version = 3; in nfs23_parse_monolithic()
1192 mntfh->size = NFS2_FHSIZE; in nfs23_parse_monolithic()
1193 ctx->version = 2; in nfs23_parse_monolithic()
1197 memcpy(mntfh->data, data->root.data, mntfh->size); in nfs23_parse_monolithic()
1198 if (mntfh->size < sizeof(mntfh->data)) in nfs23_parse_monolithic()
1199 memset(mntfh->data + mntfh->size, 0, in nfs23_parse_monolithic()
1200 sizeof(mntfh->data) - mntfh->size); in nfs23_parse_monolithic()
1207 if (!(data->flags & NFS_MOUNT_TCP)) /* this will be UDP */ in nfs23_parse_monolithic()
1208 if (data->retrans >= 64) /* shift value is too large */ in nfs23_parse_monolithic()
1215 ctx->flags = data->flags & NFS_MOUNT_FLAGMASK; in nfs23_parse_monolithic()
1216 ctx->flags |= extra_flags; in nfs23_parse_monolithic()
1217 ctx->rsize = data->rsize; in nfs23_parse_monolithic()
1218 ctx->wsize = data->wsize; in nfs23_parse_monolithic()
1219 ctx->timeo = data->timeo; in nfs23_parse_monolithic()
1220 ctx->retrans = data->retrans; in nfs23_parse_monolithic()
1221 ctx->acregmin = data->acregmin; in nfs23_parse_monolithic()
1222 ctx->acregmax = data->acregmax; in nfs23_parse_monolithic()
1223 ctx->acdirmin = data->acdirmin; in nfs23_parse_monolithic()
1224 ctx->acdirmax = data->acdirmax; in nfs23_parse_monolithic()
1225 ctx->need_mount = false; in nfs23_parse_monolithic()
1228 memcpy(sap, &data->addr, sizeof(data->addr)); in nfs23_parse_monolithic()
1229 ctx->nfs_server.addrlen = sizeof(data->addr); in nfs23_parse_monolithic()
1230 ctx->nfs_server.port = ntohs(data->addr.sin_port); in nfs23_parse_monolithic()
1233 if (sap->ss_family != AF_INET || in nfs23_parse_monolithic()
1237 if (!(data->flags & NFS_MOUNT_TCP)) in nfs23_parse_monolithic()
1238 ctx->nfs_server.protocol = XPRT_TRANSPORT_UDP; in nfs23_parse_monolithic()
1240 ctx->nfs_server.hostname = kstrdup(data->hostname, GFP_KERNEL); in nfs23_parse_monolithic()
1241 if (!ctx->nfs_server.hostname) in nfs23_parse_monolithic()
1244 ctx->namlen = data->namlen; in nfs23_parse_monolithic()
1245 ctx->bsize = data->bsize; in nfs23_parse_monolithic()
1247 if (data->flags & NFS_MOUNT_SECFLAVOUR) in nfs23_parse_monolithic()
1248 ctx->selected_flavor = data->pseudoflavor; in nfs23_parse_monolithic()
1250 ctx->selected_flavor = RPC_AUTH_UNIX; in nfs23_parse_monolithic()
1252 if (!(data->flags & NFS_MOUNT_NONLM)) in nfs23_parse_monolithic()
1253 ctx->flags &= ~(NFS_MOUNT_LOCAL_FLOCK| in nfs23_parse_monolithic()
1256 ctx->flags |= (NFS_MOUNT_LOCAL_FLOCK| in nfs23_parse_monolithic()
1267 if (data->context[0]){ in nfs23_parse_monolithic()
1271 data->context[NFS_MAX_CONTEXT_LEN] = '\0'; in nfs23_parse_monolithic()
1272 ret = vfs_parse_fs_string(fc, "context", data->context); in nfs23_parse_monolithic()
1276 return -EINVAL; in nfs23_parse_monolithic()
1289 ctx->skip_reconfig_option_check = true; in nfs23_parse_monolithic()
1297 ctx->skip_reconfig_option_check = true; in nfs23_parse_monolithic()
1309 return -ENOMEM; in nfs23_parse_monolithic()
1330 dst->data = compat_ptr(src->data); in compat_nfs_string()
1331 dst->len = src->len; in compat_nfs_string()
1361 data->auth_flavours = compat_ptr(compat->auth_flavours); in nfs4_compat_mount_data_conv()
1362 data->auth_flavourlen = compat->auth_flavourlen; in nfs4_compat_mount_data_conv()
1363 data->proto = compat->proto; in nfs4_compat_mount_data_conv()
1364 data->host_addr = compat_ptr(compat->host_addr); in nfs4_compat_mount_data_conv()
1365 data->host_addrlen = compat->host_addrlen; in nfs4_compat_mount_data_conv()
1366 compat_nfs_string(&data->hostname, &compat->hostname); in nfs4_compat_mount_data_conv()
1367 compat_nfs_string(&data->mnt_path, &compat->mnt_path); in nfs4_compat_mount_data_conv()
1368 compat_nfs_string(&data->client_addr, &compat->client_addr); in nfs4_compat_mount_data_conv()
1369 data->acdirmax = compat->acdirmax; in nfs4_compat_mount_data_conv()
1370 data->acdirmin = compat->acdirmin; in nfs4_compat_mount_data_conv()
1371 data->acregmax = compat->acregmax; in nfs4_compat_mount_data_conv()
1372 data->acregmin = compat->acregmin; in nfs4_compat_mount_data_conv()
1373 data->retrans = compat->retrans; in nfs4_compat_mount_data_conv()
1374 data->timeo = compat->timeo; in nfs4_compat_mount_data_conv()
1375 data->wsize = compat->wsize; in nfs4_compat_mount_data_conv()
1376 data->rsize = compat->rsize; in nfs4_compat_mount_data_conv()
1377 data->flags = compat->flags; in nfs4_compat_mount_data_conv()
1378 data->version = compat->version; in nfs4_compat_mount_data_conv()
1388 struct sockaddr_storage *sap = &ctx->nfs_server._address; in nfs4_parse_monolithic()
1399 ctx->version = 4; in nfs4_parse_monolithic()
1401 if (data->version != 1) in nfs4_parse_monolithic()
1407 if (data->host_addrlen > sizeof(ctx->nfs_server.address)) in nfs4_parse_monolithic()
1409 if (data->host_addrlen == 0) in nfs4_parse_monolithic()
1411 ctx->nfs_server.addrlen = data->host_addrlen; in nfs4_parse_monolithic()
1412 if (copy_from_user(sap, data->host_addr, data->host_addrlen)) in nfs4_parse_monolithic()
1413 return -EFAULT; in nfs4_parse_monolithic()
1416 ctx->nfs_server.port = ntohs(((struct sockaddr_in *)sap)->sin_port); in nfs4_parse_monolithic()
1418 if (data->auth_flavourlen) { in nfs4_parse_monolithic()
1421 if (data->auth_flavourlen > 1) in nfs4_parse_monolithic()
1423 if (copy_from_user(&pseudoflavor, data->auth_flavours, in nfs4_parse_monolithic()
1425 return -EFAULT; in nfs4_parse_monolithic()
1426 ctx->selected_flavor = pseudoflavor; in nfs4_parse_monolithic()
1428 ctx->selected_flavor = RPC_AUTH_UNIX; in nfs4_parse_monolithic()
1431 c = strndup_user(data->hostname.data, NFS4_MAXNAMLEN); in nfs4_parse_monolithic()
1434 ctx->nfs_server.hostname = c; in nfs4_parse_monolithic()
1436 c = strndup_user(data->mnt_path.data, NFS4_MAXPATHLEN); in nfs4_parse_monolithic()
1439 ctx->nfs_server.export_path = c; in nfs4_parse_monolithic()
1442 c = strndup_user(data->client_addr.data, 16); in nfs4_parse_monolithic()
1445 ctx->client_address = c; in nfs4_parse_monolithic()
1452 ctx->flags = data->flags & NFS4_MOUNT_FLAGMASK; in nfs4_parse_monolithic()
1453 ctx->rsize = data->rsize; in nfs4_parse_monolithic()
1454 ctx->wsize = data->wsize; in nfs4_parse_monolithic()
1455 ctx->timeo = data->timeo; in nfs4_parse_monolithic()
1456 ctx->retrans = data->retrans; in nfs4_parse_monolithic()
1457 ctx->acregmin = data->acregmin; in nfs4_parse_monolithic()
1458 ctx->acregmax = data->acregmax; in nfs4_parse_monolithic()
1459 ctx->acdirmin = data->acdirmin; in nfs4_parse_monolithic()
1460 ctx->acdirmax = data->acdirmax; in nfs4_parse_monolithic()
1461 ctx->nfs_server.protocol = data->proto; in nfs4_parse_monolithic()
1466 ctx->skip_reconfig_option_check = true; in nfs4_parse_monolithic()
1471 data->auth_flavourlen); in nfs4_parse_monolithic()
1484 if (fc->fs_type == &nfs_fs_type) in nfs_fs_context_parse_monolithic()
1488 if (fc->fs_type == &nfs4_fs_type) in nfs_fs_context_parse_monolithic()
1502 struct sockaddr_storage *sap = &ctx->nfs_server._address; in nfs_fs_context_validate()
1508 if (!fc->source) in nfs_fs_context_validate()
1512 if (ctx->minorversion && ctx->version != 4) in nfs_fs_context_validate()
1515 if (ctx->options & NFS_OPTION_MIGRATION && in nfs_fs_context_validate()
1516 (ctx->version != 4 || ctx->minorversion != 0)) in nfs_fs_context_validate()
1522 if (ctx->protofamily != AF_UNSPEC && in nfs_fs_context_validate()
1523 ctx->protofamily != ctx->nfs_server.address.sa_family) in nfs_fs_context_validate()
1526 if (ctx->mountfamily != AF_UNSPEC) { in nfs_fs_context_validate()
1527 if (ctx->mount_server.addrlen) { in nfs_fs_context_validate()
1528 if (ctx->mountfamily != ctx->mount_server.address.sa_family) in nfs_fs_context_validate()
1531 if (ctx->mountfamily != ctx->nfs_server.address.sa_family) in nfs_fs_context_validate()
1543 if (ctx->version == 4) { in nfs_fs_context_validate()
1545 if (ctx->nfs_server.protocol == XPRT_TRANSPORT_RDMA) in nfs_fs_context_validate()
1551 ctx->flags &= ~(NFS_MOUNT_NONLM | NFS_MOUNT_NOACL | in nfs_fs_context_validate()
1559 if (ctx->nfs_server.protocol == XPRT_TRANSPORT_RDMA) in nfs_fs_context_validate()
1563 nfs_set_port(sap, &ctx->nfs_server.port, port); in nfs_fs_context_validate()
1570 if (!ctx->nfs_mod) { in nfs_fs_context_validate()
1571 nfs_mod = find_nfs_version(ctx->version); in nfs_fs_context_validate()
1576 ctx->nfs_mod = nfs_mod; in nfs_fs_context_validate()
1580 if (fc->fs_type != ctx->nfs_mod->nfs_fs) { in nfs_fs_context_validate()
1581 module_put(fc->fs_type->owner); in nfs_fs_context_validate()
1582 __module_get(ctx->nfs_mod->nfs_fs->owner); in nfs_fs_context_validate()
1583 fc->fs_type = ctx->nfs_mod->nfs_fs; in nfs_fs_context_validate()
1591 return -EPROTONOSUPPORT; in nfs_fs_context_validate()
1600 ctx->version, ctx->minorversion); in nfs_fs_context_validate()
1618 if (!ctx->internal) in nfs_get_tree()
1619 return ctx->nfs_mod->rpc_ops->try_get_tree(fc); in nfs_get_tree()
1636 return -ENOMEM; in nfs_fs_context_dup()
1638 ctx->mntfh = nfs_alloc_fhandle(); in nfs_fs_context_dup()
1639 if (!ctx->mntfh) { in nfs_fs_context_dup()
1641 return -ENOMEM; in nfs_fs_context_dup()
1643 nfs_copy_fh(ctx->mntfh, src->mntfh); in nfs_fs_context_dup()
1645 get_nfs_version(ctx->nfs_mod); in nfs_fs_context_dup()
1646 ctx->client_address = NULL; in nfs_fs_context_dup()
1647 ctx->mount_server.hostname = NULL; in nfs_fs_context_dup()
1648 ctx->nfs_server.export_path = NULL; in nfs_fs_context_dup()
1649 ctx->nfs_server.hostname = NULL; in nfs_fs_context_dup()
1650 ctx->fscache_uniq = NULL; in nfs_fs_context_dup()
1651 ctx->clone_data.fattr = NULL; in nfs_fs_context_dup()
1652 fc->fs_private = ctx; in nfs_fs_context_dup()
1661 if (ctx->server) in nfs_fs_context_free()
1662 nfs_free_server(ctx->server); in nfs_fs_context_free()
1663 if (ctx->nfs_mod) in nfs_fs_context_free()
1664 put_nfs_version(ctx->nfs_mod); in nfs_fs_context_free()
1665 kfree(ctx->client_address); in nfs_fs_context_free()
1666 kfree(ctx->mount_server.hostname); in nfs_fs_context_free()
1667 kfree(ctx->nfs_server.export_path); in nfs_fs_context_free()
1668 kfree(ctx->nfs_server.hostname); in nfs_fs_context_free()
1669 kfree(ctx->fscache_uniq); in nfs_fs_context_free()
1670 nfs_free_fhandle(ctx->mntfh); in nfs_fs_context_free()
1671 nfs_free_fattr(ctx->clone_data.fattr); in nfs_fs_context_free()
1696 return -ENOMEM; in nfs_init_fs_context()
1698 ctx->mntfh = nfs_alloc_fhandle(); in nfs_init_fs_context()
1699 if (unlikely(!ctx->mntfh)) { in nfs_init_fs_context()
1701 return -ENOMEM; in nfs_init_fs_context()
1704 ctx->protofamily = AF_UNSPEC; in nfs_init_fs_context()
1705 ctx->mountfamily = AF_UNSPEC; in nfs_init_fs_context()
1706 ctx->mount_server.port = NFS_UNSPEC_PORT; in nfs_init_fs_context()
1708 if (fc->root) { in nfs_init_fs_context()
1710 struct nfs_server *nfss = fc->root->d_sb->s_fs_info; in nfs_init_fs_context()
1711 struct net *net = nfss->nfs_client->cl_net; in nfs_init_fs_context()
1713 ctx->flags = nfss->flags; in nfs_init_fs_context()
1714 ctx->rsize = nfss->rsize; in nfs_init_fs_context()
1715 ctx->wsize = nfss->wsize; in nfs_init_fs_context()
1716 ctx->retrans = nfss->client->cl_timeout->to_retries; in nfs_init_fs_context()
1717 ctx->selected_flavor = nfss->client->cl_auth->au_flavor; in nfs_init_fs_context()
1718 ctx->acregmin = nfss->acregmin / HZ; in nfs_init_fs_context()
1719 ctx->acregmax = nfss->acregmax / HZ; in nfs_init_fs_context()
1720 ctx->acdirmin = nfss->acdirmin / HZ; in nfs_init_fs_context()
1721 ctx->acdirmax = nfss->acdirmax / HZ; in nfs_init_fs_context()
1722 ctx->timeo = 10U * nfss->client->cl_timeout->to_initval / HZ; in nfs_init_fs_context()
1723 ctx->nfs_server.port = nfss->port; in nfs_init_fs_context()
1724 ctx->nfs_server.addrlen = nfss->nfs_client->cl_addrlen; in nfs_init_fs_context()
1725 ctx->version = nfss->nfs_client->rpc_ops->version; in nfs_init_fs_context()
1726 ctx->minorversion = nfss->nfs_client->cl_minorversion; in nfs_init_fs_context()
1728 memcpy(&ctx->nfs_server._address, &nfss->nfs_client->cl_addr, in nfs_init_fs_context()
1729 ctx->nfs_server.addrlen); in nfs_init_fs_context()
1731 if (fc->net_ns != net) { in nfs_init_fs_context()
1732 put_net(fc->net_ns); in nfs_init_fs_context()
1733 fc->net_ns = get_net(net); in nfs_init_fs_context()
1736 ctx->nfs_mod = nfss->nfs_client->cl_nfs_mod; in nfs_init_fs_context()
1737 get_nfs_version(ctx->nfs_mod); in nfs_init_fs_context()
1740 ctx->timeo = NFS_UNSPEC_TIMEO; in nfs_init_fs_context()
1741 ctx->retrans = NFS_UNSPEC_RETRANS; in nfs_init_fs_context()
1742 ctx->acregmin = NFS_DEF_ACREGMIN; in nfs_init_fs_context()
1743 ctx->acregmax = NFS_DEF_ACREGMAX; in nfs_init_fs_context()
1744 ctx->acdirmin = NFS_DEF_ACDIRMIN; in nfs_init_fs_context()
1745 ctx->acdirmax = NFS_DEF_ACDIRMAX; in nfs_init_fs_context()
1746 ctx->nfs_server.port = NFS_UNSPEC_PORT; in nfs_init_fs_context()
1747 ctx->nfs_server.protocol = XPRT_TRANSPORT_TCP; in nfs_init_fs_context()
1748 ctx->selected_flavor = RPC_AUTH_MAXFLAVOR; in nfs_init_fs_context()
1749 ctx->minorversion = 0; in nfs_init_fs_context()
1750 ctx->need_mount = true; in nfs_init_fs_context()
1751 ctx->xprtsec.policy = RPC_XPRTSEC_NONE; in nfs_init_fs_context()
1752 ctx->xprtsec.cert_serial = TLS_NO_CERT; in nfs_init_fs_context()
1753 ctx->xprtsec.privkey_serial = TLS_NO_PRIVKEY; in nfs_init_fs_context()
1755 if (fc->net_ns != &init_net) in nfs_init_fs_context()
1756 ctx->flags |= NFS_MOUNT_NETUNREACH_FATAL; in nfs_init_fs_context()
1758 fc->s_iflags |= SB_I_STABLE_WRITES; in nfs_init_fs_context()
1760 fc->fs_private = ctx; in nfs_init_fs_context()
1761 fc->ops = &nfs_fs_context_ops; in nfs_init_fs_context()