diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2008-06-25 17:24:54 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2008-07-09 12:09:37 -0400 |
commit | 40fef8a649e5344bfb6a67a7cc3def3e0dad6448 (patch) | |
tree | bfcbea1a0cf81ca14d59debb6fb77e83a430b2ab | |
parent | 8842413aa4c3220ce9313791f99808fc149ca16d (diff) |
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>
-rw-r--r-- | fs/Kconfig | 21 | ||||
-rw-r--r-- | net/sunrpc/rpcb_clnt.c | 12 |
2 files changed, 0 insertions, 33 deletions
diff --git a/fs/Kconfig b/fs/Kconfig index 1c16de9611e9..0ce72dcd6b96 100644 --- a/fs/Kconfig +++ b/fs/Kconfig | |||
@@ -1799,27 +1799,6 @@ config SUNRPC_XPRT_RDMA | |||
1799 | 1799 | ||
1800 | If unsure, say N. | 1800 | If unsure, say N. |
1801 | 1801 | ||
1802 | config SUNRPC_BIND34 | ||
1803 | bool "Support for rpcbind versions 3 & 4 (EXPERIMENTAL)" | ||
1804 | depends on SUNRPC && EXPERIMENTAL | ||
1805 | default n | ||
1806 | help | ||
1807 | RPC requests over IPv6 networks require support for larger | ||
1808 | addresses when performing an RPC bind. Sun added support for | ||
1809 | IPv6 addressing by creating two new versions of the rpcbind | ||
1810 | protocol (RFC 1833). | ||
1811 | |||
1812 | This option enables support in the kernel RPC client for | ||
1813 | querying rpcbind servers via versions 3 and 4 of the rpcbind | ||
1814 | protocol. The kernel automatically falls back to version 2 | ||
1815 | if a remote rpcbind service does not support versions 3 or 4. | ||
1816 | By themselves, these new versions do not provide support for | ||
1817 | RPC over IPv6, but the new protocol versions are necessary to | ||
1818 | support it. | ||
1819 | |||
1820 | If unsure, say N to get traditional behavior (version 2 rpcbind | ||
1821 | requests only). | ||
1822 | |||
1823 | config RPCSEC_GSS_KRB5 | 1802 | config RPCSEC_GSS_KRB5 |
1824 | tristate "Secure RPC: Kerberos V mechanism (EXPERIMENTAL)" | 1803 | tristate "Secure RPC: Kerberos V mechanism (EXPERIMENTAL)" |
1825 | depends on SUNRPC && EXPERIMENTAL | 1804 | depends on SUNRPC && EXPERIMENTAL |
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c index 625ba72e624a..c62e446723ae 100644 --- a/net/sunrpc/rpcb_clnt.c +++ b/net/sunrpc/rpcb_clnt.c | |||
@@ -592,16 +592,6 @@ static struct rpc_procinfo rpcb_procedures4[] = { | |||
592 | }; | 592 | }; |
593 | 593 | ||
594 | static struct rpcb_info rpcb_next_version[] = { | 594 | static struct rpcb_info rpcb_next_version[] = { |
595 | #ifdef CONFIG_SUNRPC_BIND34 | ||
596 | { | ||
597 | .rpc_vers = RPCBVERS_4, | ||
598 | .rpc_proc = &rpcb_procedures4[RPCBPROC_GETADDR], | ||
599 | }, | ||
600 | { | ||
601 | .rpc_vers = RPCBVERS_3, | ||
602 | .rpc_proc = &rpcb_procedures3[RPCBPROC_GETADDR], | ||
603 | }, | ||
604 | #endif | ||
605 | { | 595 | { |
606 | .rpc_vers = RPCBVERS_2, | 596 | .rpc_vers = RPCBVERS_2, |
607 | .rpc_proc = &rpcb_procedures2[RPCBPROC_GETPORT], | 597 | .rpc_proc = &rpcb_procedures2[RPCBPROC_GETPORT], |
@@ -612,7 +602,6 @@ static struct rpcb_info rpcb_next_version[] = { | |||
612 | }; | 602 | }; |
613 | 603 | ||
614 | static struct rpcb_info rpcb_next_version6[] = { | 604 | static struct rpcb_info rpcb_next_version6[] = { |
615 | #ifdef CONFIG_SUNRPC_BIND34 | ||
616 | { | 605 | { |
617 | .rpc_vers = RPCBVERS_4, | 606 | .rpc_vers = RPCBVERS_4, |
618 | .rpc_proc = &rpcb_procedures4[RPCBPROC_GETADDR], | 607 | .rpc_proc = &rpcb_procedures4[RPCBPROC_GETADDR], |
@@ -621,7 +610,6 @@ static struct rpcb_info rpcb_next_version6[] = { | |||
621 | .rpc_vers = RPCBVERS_3, | 610 | .rpc_vers = RPCBVERS_3, |
622 | .rpc_proc = &rpcb_procedures3[RPCBPROC_GETADDR], | 611 | .rpc_proc = &rpcb_procedures3[RPCBPROC_GETADDR], |
623 | }, | 612 | }, |
624 | #endif | ||
625 | { | 613 | { |
626 | .rpc_proc = NULL, | 614 | .rpc_proc = NULL, |
627 | }, | 615 | }, |