Commit b24ee6c6 authored by Olga Kornievskaia's avatar Olga Kornievskaia Committed by Anna Schumaker

NFS: allow deprecation of NFS UDP protocol

Add a kernel config CONFIG_NFS_DISABLE_UDP_SUPPORT to disallow NFS
UDP mounts and enable it by default.
Signed-off-by: default avatarOlga Kornievskaia <kolga@netapp.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent f7b37b8b
...@@ -196,3 +196,12 @@ config NFS_DEBUG ...@@ -196,3 +196,12 @@ config NFS_DEBUG
depends on NFS_FS && SUNRPC_DEBUG depends on NFS_FS && SUNRPC_DEBUG
select CRC32 select CRC32
default y default y
config NFS_DISABLE_UDP_SUPPORT
bool "NFS: Disable NFS UDP protocol support"
depends on NFS_FS
default y
help
Choose Y here to disable the use of NFS over UDP. NFS over UDP
on modern networks (1Gb+) can lead to data corruption caused by
fragmentation during high loads.
...@@ -474,6 +474,7 @@ void nfs_init_timeout_values(struct rpc_timeout *to, int proto, ...@@ -474,6 +474,7 @@ void nfs_init_timeout_values(struct rpc_timeout *to, int proto,
to->to_maxval = to->to_initval; to->to_maxval = to->to_initval;
to->to_exponential = 0; to->to_exponential = 0;
break; break;
#ifndef CONFIG_NFS_DISABLE_UDP_SUPPORT
case XPRT_TRANSPORT_UDP: case XPRT_TRANSPORT_UDP:
if (retrans == NFS_UNSPEC_RETRANS) if (retrans == NFS_UNSPEC_RETRANS)
to->to_retries = NFS_DEF_UDP_RETRANS; to->to_retries = NFS_DEF_UDP_RETRANS;
...@@ -484,6 +485,7 @@ void nfs_init_timeout_values(struct rpc_timeout *to, int proto, ...@@ -484,6 +485,7 @@ void nfs_init_timeout_values(struct rpc_timeout *to, int proto,
to->to_maxval = NFS_MAX_UDP_TIMEOUT; to->to_maxval = NFS_MAX_UDP_TIMEOUT;
to->to_exponential = 1; to->to_exponential = 1;
break; break;
#endif
default: default:
BUG(); BUG();
} }
...@@ -580,8 +582,10 @@ static int nfs_start_lockd(struct nfs_server *server) ...@@ -580,8 +582,10 @@ static int nfs_start_lockd(struct nfs_server *server)
default: default:
nlm_init.protocol = IPPROTO_TCP; nlm_init.protocol = IPPROTO_TCP;
break; break;
#ifndef CONFIG_NFS_DISABLE_UDP_SUPPORT
case XPRT_TRANSPORT_UDP: case XPRT_TRANSPORT_UDP:
nlm_init.protocol = IPPROTO_UDP; nlm_init.protocol = IPPROTO_UDP;
#endif
} }
host = nlmclnt_init(&nlm_init); host = nlmclnt_init(&nlm_init);
......
...@@ -1215,6 +1215,10 @@ static int nfs_fs_context_validate(struct fs_context *fc) ...@@ -1215,6 +1215,10 @@ static int nfs_fs_context_validate(struct fs_context *fc)
} }
} else { } else {
nfs_set_mount_transport_protocol(ctx); nfs_set_mount_transport_protocol(ctx);
#ifdef CONFIG_NFS_DISABLE_UDP_SUPPORT
if (ctx->nfs_server.protocol == XPRT_TRANSPORT_UDP)
goto out_invalid_transport_udp;
#endif
if (ctx->nfs_server.protocol == XPRT_TRANSPORT_RDMA) if (ctx->nfs_server.protocol == XPRT_TRANSPORT_RDMA)
port = NFS_RDMA_PORT; port = NFS_RDMA_PORT;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment