aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2013-11-19 16:34:14 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-12-12 01:36:27 -0500
commit0d08c381362aca8ef20c7fe1fa4c1ce36728208b (patch)
treef2ed133337dea20c98fcc3ffd24e4608ead6eb65 /fs/nfs
parent9fac703e99f250d6c8ff9caf306d1160bbf90064 (diff)
NFSv4: Update list of irrecoverable errors on DELEGRETURN
commit c97cf606e43b85a6cf158b810375dd77312024db upstream. If the DELEGRETURN errors out with something like NFS4ERR_BAD_STATEID then there is no recovery possible. Just quit without returning an error. Also, note that the client must not assume that the NFSv4 lease has been renewed when it sees an error on DELEGRETURN. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/nfs4proc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index e78b8c2656ee..23881380dc6f 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -4401,11 +4401,17 @@ static void nfs4_delegreturn_done(struct rpc_task *task, void *calldata)
4401 return; 4401 return;
4402 4402
4403 switch (task->tk_status) { 4403 switch (task->tk_status) {
4404 case -NFS4ERR_STALE_STATEID:
4405 case -NFS4ERR_EXPIRED:
4406 case 0: 4404 case 0:
4407 renew_lease(data->res.server, data->timestamp); 4405 renew_lease(data->res.server, data->timestamp);
4408 break; 4406 break;
4407 case -NFS4ERR_ADMIN_REVOKED:
4408 case -NFS4ERR_DELEG_REVOKED:
4409 case -NFS4ERR_BAD_STATEID:
4410 case -NFS4ERR_OLD_STATEID:
4411 case -NFS4ERR_STALE_STATEID:
4412 case -NFS4ERR_EXPIRED:
4413 task->tk_status = 0;
4414 break;
4409 default: 4415 default:
4410 if (nfs4_async_handle_error(task, data->res.server, NULL) == 4416 if (nfs4_async_handle_error(task, data->res.server, NULL) ==
4411 -EAGAIN) { 4417 -EAGAIN) {