Patchwork [3.5.y.z,extended,stable] Patch "NFSv4.1: Handle NFS4ERR_DELAY when resetting the NFSv4.1" has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Feb. 1, 2013, 2:40 p.m.
Message ID <>
Download mbox | patch
Permalink /patch/217481/
State New
Headers show


Herton Ronaldo Krzesinski - Feb. 1, 2013, 2:40 p.m.
This is a note to let you know that I have just added a patch titled

    NFSv4.1: Handle NFS4ERR_DELAY when resetting the NFSv4.1

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From 8fd58400dd39367b812de5d61ca159b94d366345 Mon Sep 17 00:00:00 2001
From: Trond Myklebust <>
Date: Wed, 30 Jan 2013 13:04:10 -0500
Subject: [PATCH] NFSv4.1: Handle NFS4ERR_DELAY when resetting the NFSv4.1

commit c489ee290bdbbace6bb63ebe6ebd4dd605819495 upstream.

NFS4ERR_DELAY is a legal reply when we call DESTROY_SESSION. It
usually means that the server is busy handling an unfinished RPC
request. Just sleep for a second and then retry.
We also need to be able to handle the NFS4ERR_BACK_CHAN_BUSY return
value. If the NFS server has outstanding callbacks, we just want to
similarly sleep & retry.

Signed-off-by: Trond Myklebust <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 fs/nfs/nfs4state.c |   14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)



diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index f38300e..9bc63d3 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -1767,8 +1767,18 @@  static int nfs4_reset_session(struct nfs_client *clp)
 	cred = nfs4_get_exchange_id_cred(clp);
 	status = nfs4_proc_destroy_session(clp->cl_session, cred);
-	if (status && status != -NFS4ERR_BADSESSION &&
-	    status != -NFS4ERR_DEADSESSION) {
+	switch (status) {
+	case 0:
+		break;
+	case -NFS4ERR_DELAY:
+		set_bit(NFS4CLNT_SESSION_RESET, &clp->cl_state);
+		status = 0;
+		ssleep(1);
+		goto out;
+	default:
 		status = nfs4_recovery_handle_error(clp, status);
 		goto out;