aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2013-11-19 16:34:14 -0500
committerBen Hutchings <ben@decadent.org.uk>2014-01-03 04:33:23 +0000
commit3b327af6ff9f42a44ee4690860b34b76308d90e4 (patch)
treecce84863666190f5a62fc56cab889e0bc06783cd /fs/nfs
parenta687a58fd0fa69d405d777eba5f23a0c00cce2e7 (diff)
downloadkernel_samsung_smdk4412-3b327af6ff9f42a44ee4690860b34b76308d90e4.zip
kernel_samsung_smdk4412-3b327af6ff9f42a44ee4690860b34b76308d90e4.tar.gz
kernel_samsung_smdk4412-3b327af6ff9f42a44ee4690860b34b76308d90e4.tar.bz2
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: Ben Hutchings <ben@decadent.org.uk>
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 45adee5..3d02931 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -3886,11 +3886,17 @@ static void nfs4_delegreturn_done(struct rpc_task *task, void *calldata)
return;
switch (task->tk_status) {
- case -NFS4ERR_STALE_STATEID:
- case -NFS4ERR_EXPIRED:
case 0:
renew_lease(data->res.server, data->timestamp);
break;
+ case -NFS4ERR_ADMIN_REVOKED:
+ case -NFS4ERR_DELEG_REVOKED:
+ case -NFS4ERR_BAD_STATEID:
+ case -NFS4ERR_OLD_STATEID:
+ case -NFS4ERR_STALE_STATEID:
+ case -NFS4ERR_EXPIRED:
+ task->tk_status = 0;
+ break;
default:
if (nfs4_async_handle_error(task, data->res.server, NULL) ==
-EAGAIN) {