SUNRPC: Don't auto-disconnect from the local rpcbind socket
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 5 Aug 2013 18:10:43 +0000 (14:10 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 6 Aug 2013 02:17:00 +0000 (22:17 -0400)
There is no need for the kernel to time out the AF_LOCAL connection to
the rpcbind socket, and doing so is problematic because when it is
time to reconnect, our process may no longer be using the same mount
namespace.

Reported-by: Nix <nix@esperi.org.uk>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: Jeff Layton <jlayton@redhat.com>
Cc: stable@vger.kernel.org # 3.9.x
net/sunrpc/rpcb_clnt.c

index 3df764dc330cbdb398e7dbbd5c6558d894bfc386..b0f7232271579a3c4ad5ec395e8fe8f265347b90 100644 (file)
@@ -238,6 +238,14 @@ static int rpcb_create_local_unix(struct net *net)
                .program        = &rpcb_program,
                .version        = RPCBVERS_2,
                .authflavor     = RPC_AUTH_NULL,
+               /*
+                * We turn off the idle timeout to prevent the kernel
+                * from automatically disconnecting the socket.
+                * Otherwise, we'd have to cache the mount namespace
+                * of the caller and somehow pass that to the socket
+                * reconnect code.
+                */
+               .flags          = RPC_CLNT_CREATE_NO_IDLE_TIMEOUT,
        };
        struct rpc_clnt *clnt, *clnt4;
        int result = 0;