diff options
author | Ricardo Labiaga <Ricardo.Labiaga@netapp.com> | 2011-03-09 13:13:44 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2011-03-10 15:04:59 -0500 |
commit | 7d6d63d6427090cbb1d282364b65b12634ca59bd (patch) | |
tree | b75f3278469f86453e8b90ced1a5c3698a9c4a93 /fs/nfs/nfs4proc.c | |
parent | 4cea288aaf0e11647880cc487350b1dc45d9febc (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.c | 12 |
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 | ||