summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2019-10-27 03:37:40 +0100
committerTrond Myklebust <trond.myklebust@hammerspace.com>2019-11-04 03:28:46 +0100
commit70d136b2dc184f1c9d026de443dbe635ea8a0839 (patch)
tree3290906c1d710bf2378d693fb2a38c159b8b2685 /fs
parentNFSv4: Handle NFS4ERR_OLD_STATEID in delegreturn (diff)
downloadlinux-70d136b2dc184f1c9d026de443dbe635ea8a0839.tar.xz
linux-70d136b2dc184f1c9d026de443dbe635ea8a0839.zip
NFSv4: Don't retry the GETATTR on old stateid in nfs4_delegreturn_done()
If the server returns NFS4ERR_OLD_STATEID, then just skip retrying the GETATTR when replaying the delegreturn compound. We know nothing will have changed on the server. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/nfs4proc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 33a8e53e976c..a64ce9518776 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -6198,6 +6198,10 @@ static void nfs4_delegreturn_done(struct rpc_task *task, void *calldata)
case -NFS4ERR_OLD_STATEID:
if (!nfs4_refresh_delegation_stateid(&data->stateid, data->inode))
nfs4_stateid_seqid_inc(&data->stateid);
+ if (data->args.bitmask) {
+ data->args.bitmask = NULL;
+ data->res.fattr = NULL;
+ }
goto out_restart;
case -NFS4ERR_ACCESS:
if (data->args.bitmask) {