NFS: disconnect before retrying NFSv4 requests over TCP
authorChuck Lever <chuck.lever@oracle.com>
Tue, 6 Feb 2007 23:26:11 +0000 (18:26 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Tue, 13 Feb 2007 06:40:45 +0000 (22:40 -0800)
commit43d78ef2ba5bec26d0315859e8324bfc0be23766
tree6ea576e0a20a11745c7a45b2a15dd855a45b655a
parenta301b777714087ea1d63dbec0173a13d416cd7a9
NFS: disconnect before retrying NFSv4 requests over TCP

RFC3530 section 3.1.1 states an NFSv4 client MUST NOT send a request
twice on the same connection unless it is the NULL procedure.  Section
3.1.1 suggests that the client should disconnect and reconnect if it
wants to retry a request.

Implement this by adding an rpc_clnt flag that an ULP can use to
specify that the underlying transport should be disconnected on a
major timeout.  The NFSv4 client asserts this new flag, and requests
no retries after a minor retransmit timeout.

Note that disconnecting on a retransmit is in general not safe to do
if the RPC client does not reuse the TCP port number when reconnecting.

See http://bugzilla.linux-nfs.org/show_bug.cgi?id=6

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/client.c
include/linux/sunrpc/clnt.h
net/sunrpc/clnt.c
net/sunrpc/xprt.c