aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2012-05-25 15:00:06 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-05-25 16:17:42 -0400
commit89a217360ef4e96eb83758cb9647f1c42581b097 (patch)
treea802dbd6fdca71da10b7f5983215f83a4fadeb2b /fs/nfs
parentbe0bfed002e0c64a91dacc42a4dab6e883e6bc7e (diff)
NFSv4.1: Handle NFS4ERR_SEQ_MISORDERED when confirming the lease
Apparently the patch "NFS: Always use the same SETCLIENTID boot verifier" is tickling a Linux nfs server bug, and causing a regression: the server can get into a situation where it keeps replying NFS4ERR_SEQ_MISORDERED to our CREATE_SESSION request even when we are sending the correct sequence ID. Fix this by purging the lease and then retrying. Reported-by: Bryan Schumaker <bjschuma@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/nfs4state.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 604c6009d1ac..419f8c44429e 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -1580,6 +1580,11 @@ out:
1580static int nfs4_handle_reclaim_lease_error(struct nfs_client *clp, int status) 1580static int nfs4_handle_reclaim_lease_error(struct nfs_client *clp, int status)
1581{ 1581{
1582 switch (status) { 1582 switch (status) {
1583 case -NFS4ERR_SEQ_MISORDERED:
1584 if (test_and_set_bit(NFS4CLNT_PURGE_STATE, &clp->cl_state))
1585 return -ESERVERFAULT;
1586 /* Lease confirmation error: retry after purging the lease */
1587 ssleep(1);
1583 case -NFS4ERR_CLID_INUSE: 1588 case -NFS4ERR_CLID_INUSE:
1584 case -NFS4ERR_STALE_CLIENTID: 1589 case -NFS4ERR_STALE_CLIENTID:
1585 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state); 1590 clear_bit(NFS4CLNT_LEASE_CONFIRM, &clp->cl_state);