SUNRPC: Use only rpcbind v2 for AF_INET requests
Chuck Lever [Wed, 25 Jun 2008 21:24:54 +0000 (17:24 -0400)]
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>

fs/Kconfig
net/sunrpc/rpcb_clnt.c

index 1c16de9..0ce72dc 100644 (file)
@@ -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
index 625ba72..c62e446 100644 (file)
@@ -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,
        },