On Mon, Nov 30, 2020 at 04:24:54PM -0500, trondmy@xxxxxxxxxx wrote: > From: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> > > If the underlying filesystem times out, then we want knfsd to return > NFSERR_JUKEBOX/DELAY rather than NFSERR_STALE. Out of curiosity, what was causing ETIMEDOUT in practice? --b. > > Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx> > --- > fs/nfsd/nfsfh.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c > index 0c2ee65e46f3..46c86f7bc429 100644 > --- a/fs/nfsd/nfsfh.c > +++ b/fs/nfsd/nfsfh.c > @@ -268,12 +268,20 @@ static __be32 nfsd_set_fh_dentry(struct svc_rqst *rqstp, struct svc_fh *fhp) > if (fileid_type == FILEID_ROOT) > dentry = dget(exp->ex_path.dentry); > else { > - dentry = exportfs_decode_fh(exp->ex_path.mnt, fid, > - data_left, fileid_type, > - nfsd_acceptable, exp); > - if (IS_ERR_OR_NULL(dentry)) > + dentry = exportfs_decode_fh_raw(exp->ex_path.mnt, fid, > + data_left, fileid_type, > + nfsd_acceptable, exp); > + if (IS_ERR_OR_NULL(dentry)) { > trace_nfsd_set_fh_dentry_badhandle(rqstp, fhp, > dentry ? PTR_ERR(dentry) : -ESTALE); > + switch (PTR_ERR(dentry)) { > + case -ENOMEM: > + case -ETIMEDOUT: > + break; > + default: > + dentry = ERR_PTR(-ESTALE); > + } > + } > } > if (dentry == NULL) > goto out; > -- > 2.28.0