Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 40fef8a6 authored by Chuck Lever's avatar Chuck Lever Committed by Trond Myklebust
Browse files

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: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 8842413a
Loading
Loading
Loading
Loading
+0 −21
Original line number Diff line number Diff line
@@ -1799,27 +1799,6 @@ config SUNRPC_XPRT_RDMA

	  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
	tristate "Secure RPC: Kerberos V mechanism (EXPERIMENTAL)"
	depends on SUNRPC && EXPERIMENTAL
+0 −12
Original line number Diff line number Diff line
@@ -592,16 +592,6 @@ static struct rpc_procinfo rpcb_procedures4[] = {
};

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_proc	= &rpcb_procedures2[RPCBPROC_GETPORT],
@@ -612,7 +602,6 @@ static struct rpcb_info rpcb_next_version[] = {
};

static struct rpcb_info rpcb_next_version6[] = {
#ifdef CONFIG_SUNRPC_BIND34
	{
		.rpc_vers	= RPCBVERS_4,
		.rpc_proc	= &rpcb_procedures4[RPCBPROC_GETADDR],
@@ -621,7 +610,6 @@ static struct rpcb_info rpcb_next_version6[] = {
		.rpc_vers	= RPCBVERS_3,
		.rpc_proc	= &rpcb_procedures3[RPCBPROC_GETADDR],
	},
#endif
	{
		.rpc_proc	= NULL,
	},