aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.c
diff options
context:
space:
mode:
authorRicardo Labiaga <Ricardo.Labiaga@netapp.com>2011-03-09 13:13:44 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2011-03-10 15:04:59 -0500
commit7d6d63d6427090cbb1d282364b65b12634ca59bd (patch)
treeb75f3278469f86453e8b90ced1a5c3698a9c4a93 /fs/nfs/nfs4proc.c
parent4cea288aaf0e11647880cc487350b1dc45d9febc (diff)
NFSv4.1: Retry CREATE_SESSION on NFS4ERR_DELAY
Fix bug where we currently retry the EXCHANGEID call again, eventhough we already have a valid clientid. Instead, delay and retry the CREATE_SESSION call. Signed-off-by: Ricardo Labiaga <Ricardo.Labiaga@netapp.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index b07d4e23b876..d3c705aa71f6 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -5028,10 +5028,20 @@ int nfs4_proc_create_session(struct nfs_client *clp)
5028 int status; 5028 int status;
5029 unsigned *ptr; 5029 unsigned *ptr;
5030 struct nfs4_session *session = clp->cl_session; 5030 struct nfs4_session *session = clp->cl_session;
5031 long timeout = 0;
5032 int err;
5031 5033
5032 dprintk("--> %s clp=%p session=%p\n", __func__, clp, session); 5034 dprintk("--> %s clp=%p session=%p\n", __func__, clp, session);
5033 5035
5034 status = _nfs4_proc_create_session(clp); 5036 do {
5037 status = _nfs4_proc_create_session(clp);
5038 if (status == -NFS4ERR_DELAY) {
5039 err = nfs4_delay(clp->cl_rpcclient, &timeout);
5040 if (err)
5041 status = err;
5042 }
5043 } while (status == -NFS4ERR_DELAY);
5044
5035 if (status) 5045 if (status)
5036 goto out; 5046 goto out;
5037 5047