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 | }, |
