SUNRPC: Use only rpcbind v2 for AF_INET requests
Some server vendors support the higher versions of rpcbind only for AF_INET6. The kernel doesn't need to use v3 or v4 for AF_INET anyway, so change the kernel's rpcbind client to query AF_INET servers over rpcbind v2 only. This has a few interesting benefits: 1. If the rpcbind request is going over TCP, and the server doesn't support rpcbind versions 3 or 4, the client reduces by two the number of ephemeral ports left in TIME_WAIT for each rpcbind request. This will help during NFS mount storms. 2. The rpcbind interaction with servers that don't support rpcbind versions 3 or 4 will use less network traffic. Also helpful during mount storms. 3. We can eliminate the kernel build option that controls whether the kernel's rpcbind client uses rpcbind version 3 and 4 for AF_INET servers. Less complicated kernel configuration... Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
Родитель
8842413aa4
Коммит
40fef8a649
21
fs/Kconfig
21
fs/Kconfig
|
@ -1799,27 +1799,6 @@ config SUNRPC_XPRT_RDMA
|
||||||
|
|
||||||
If unsure, say N.
|
If unsure, say N.
|
||||||
|
|
||||||
config SUNRPC_BIND34
|
|
||||||
bool "Support for rpcbind versions 3 & 4 (EXPERIMENTAL)"
|
|
||||||
depends on SUNRPC && EXPERIMENTAL
|
|
||||||
default n
|
|
||||||
help
|
|
||||||
RPC requests over IPv6 networks require support for larger
|
|
||||||
addresses when performing an RPC bind. Sun added support for
|
|
||||||
IPv6 addressing by creating two new versions of the rpcbind
|
|
||||||
protocol (RFC 1833).
|
|
||||||
|
|
||||||
This option enables support in the kernel RPC client for
|
|
||||||
querying rpcbind servers via versions 3 and 4 of the rpcbind
|
|
||||||
protocol. The kernel automatically falls back to version 2
|
|
||||||
if a remote rpcbind service does not support versions 3 or 4.
|
|
||||||
By themselves, these new versions do not provide support for
|
|
||||||
RPC over IPv6, but the new protocol versions are necessary to
|
|
||||||
support it.
|
|
||||||
|
|
||||||
If unsure, say N to get traditional behavior (version 2 rpcbind
|
|
||||||
requests only).
|
|
||||||
|
|
||||||
config RPCSEC_GSS_KRB5
|
config RPCSEC_GSS_KRB5
|
||||||
tristate "Secure RPC: Kerberos V mechanism (EXPERIMENTAL)"
|
tristate "Secure RPC: Kerberos V mechanism (EXPERIMENTAL)"
|
||||||
depends on SUNRPC && EXPERIMENTAL
|
depends on SUNRPC && EXPERIMENTAL
|
||||||
|
|
|
@ -592,16 +592,6 @@ static struct rpc_procinfo rpcb_procedures4[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct rpcb_info rpcb_next_version[] = {
|
static struct rpcb_info rpcb_next_version[] = {
|
||||||
#ifdef CONFIG_SUNRPC_BIND34
|
|
||||||
{
|
|
||||||
.rpc_vers = RPCBVERS_4,
|
|
||||||
.rpc_proc = &rpcb_procedures4[RPCBPROC_GETADDR],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.rpc_vers = RPCBVERS_3,
|
|
||||||
.rpc_proc = &rpcb_procedures3[RPCBPROC_GETADDR],
|
|
||||||
},
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
.rpc_vers = RPCBVERS_2,
|
.rpc_vers = RPCBVERS_2,
|
||||||
.rpc_proc = &rpcb_procedures2[RPCBPROC_GETPORT],
|
.rpc_proc = &rpcb_procedures2[RPCBPROC_GETPORT],
|
||||||
|
@ -612,7 +602,6 @@ static struct rpcb_info rpcb_next_version[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct rpcb_info rpcb_next_version6[] = {
|
static struct rpcb_info rpcb_next_version6[] = {
|
||||||
#ifdef CONFIG_SUNRPC_BIND34
|
|
||||||
{
|
{
|
||||||
.rpc_vers = RPCBVERS_4,
|
.rpc_vers = RPCBVERS_4,
|
||||||
.rpc_proc = &rpcb_procedures4[RPCBPROC_GETADDR],
|
.rpc_proc = &rpcb_procedures4[RPCBPROC_GETADDR],
|
||||||
|
@ -621,7 +610,6 @@ static struct rpcb_info rpcb_next_version6[] = {
|
||||||
.rpc_vers = RPCBVERS_3,
|
.rpc_vers = RPCBVERS_3,
|
||||||
.rpc_proc = &rpcb_procedures3[RPCBPROC_GETADDR],
|
.rpc_proc = &rpcb_procedures3[RPCBPROC_GETADDR],
|
||||||
},
|
},
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
.rpc_proc = NULL,
|
.rpc_proc = NULL,
|
||||||
},
|
},
|
||||||
|
|
Загрузка…
Ссылка в новой задаче