Message ID | 20200106181808.562969-2-trond.myklebust@hammerspace.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Improve performance of containerised knfsd | expand |
On Mon, Jan 06, 2020 at 01:18:03PM -0500, Trond Myklebust wrote: > If the lookup keeps finding a nfsd_file with an unhashed open file, > then retry once only. So, symptoms are a hang? Should this be cc: stable, Fixes: 65294c1f2c5e ("nfsd: add a new struct file caching facility to nfsd") ? --b. > > Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> > --- > fs/nfsd/filecache.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c > index 32a9bf22ac08..0a3e5c2aac4b 100644 > --- a/fs/nfsd/filecache.c > +++ b/fs/nfsd/filecache.c > @@ -789,6 +789,7 @@ nfsd_file_acquire(struct svc_rqst *rqstp, struct svc_fh *fhp, > struct nfsd_file *nf, *new; > struct inode *inode; > unsigned int hashval; > + bool retry = true; > > /* FIXME: skip this if fh_dentry is already set? */ > status = fh_verify(rqstp, fhp, S_IFREG, > @@ -824,6 +825,11 @@ nfsd_file_acquire(struct svc_rqst *rqstp, struct svc_fh *fhp, > > /* Did construction of this file fail? */ > if (!test_bit(NFSD_FILE_HASHED, &nf->nf_flags)) { > + if (!retry) { > + status = nfserr_jukebox; > + goto out; > + } > + retry = false; > nfsd_file_put_noref(nf); > goto retry; > } > -- > 2.24.1
On Tue, 2020-01-21 at 16:28 -0500, J. Bruce Fields wrote: > On Mon, Jan 06, 2020 at 01:18:03PM -0500, Trond Myklebust wrote: > > If the lookup keeps finding a nfsd_file with an unhashed open file, > > then retry once only. > > So, symptoms are a hang? > > Should this be cc: stable, Fixes: 65294c1f2c5e ("nfsd: add a new > struct > file caching facility to nfsd") ? I would recommend that we make it a stable fix, yes. We've hit it internally, and I believe Chuck was hitting it as well.
diff --git a/fs/nfsd/filecache.c b/fs/nfsd/filecache.c index 32a9bf22ac08..0a3e5c2aac4b 100644 --- a/fs/nfsd/filecache.c +++ b/fs/nfsd/filecache.c @@ -789,6 +789,7 @@ nfsd_file_acquire(struct svc_rqst *rqstp, struct svc_fh *fhp, struct nfsd_file *nf, *new; struct inode *inode; unsigned int hashval; + bool retry = true; /* FIXME: skip this if fh_dentry is already set? */ status = fh_verify(rqstp, fhp, S_IFREG, @@ -824,6 +825,11 @@ nfsd_file_acquire(struct svc_rqst *rqstp, struct svc_fh *fhp, /* Did construction of this file fail? */ if (!test_bit(NFSD_FILE_HASHED, &nf->nf_flags)) { + if (!retry) { + status = nfserr_jukebox; + goto out; + } + retry = false; nfsd_file_put_noref(nf); goto retry; }
If the lookup keeps finding a nfsd_file with an unhashed open file, then retry once only. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> --- fs/nfsd/filecache.c | 6 ++++++ 1 file changed, 6 insertions(+)