summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorRicardo Labiaga <Ricardo.Labiaga@netapp.com>2011-03-09 19:13:44 +0100
committerTrond Myklebust <Trond.Myklebust@netapp.com>2011-03-10 21:04:59 +0100
commit7d6d63d6427090cbb1d282364b65b12634ca59bd (patch)
treeb75f3278469f86453e8b90ced1a5c3698a9c4a93 /fs
parentsunrpc: Propagate errors from xs_bind() through xs_create_sock() (diff)
downloadlinux-7d6d63d6427090cbb1d282364b65b12634ca59bd.tar.xz
linux-7d6d63d6427090cbb1d282364b65b12634ca59bd.zip
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')
-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)
int status;
unsigned *ptr;
struct nfs4_session *session = clp->cl_session;
+ long timeout = 0;
+ int err;
dprintk("--> %s clp=%p session=%p\n", __func__, clp, session);
- status = _nfs4_proc_create_session(clp);
+ do {
+ status = _nfs4_proc_create_session(clp);
+ if (status == -NFS4ERR_DELAY) {
+ err = nfs4_delay(clp->cl_rpcclient, &timeout);
+ if (err)
+ status = err;
+ }
+ } while (status == -NFS4ERR_DELAY);
+
if (status)
goto out;