diff options
author | Trond Myklebust <trond.myklebust@hammerspace.com> | 2019-10-27 03:37:40 +0100 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@hammerspace.com> | 2019-11-04 03:28:46 +0100 |
commit | 70d136b2dc184f1c9d026de443dbe635ea8a0839 (patch) | |
tree | 3290906c1d710bf2378d693fb2a38c159b8b2685 /fs | |
parent | NFSv4: Handle NFS4ERR_OLD_STATEID in delegreturn (diff) | |
download | linux-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.c | 4 |
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) { |