mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 22:54:05 +08:00
nfsd: fix filecache lookup
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>
Cc: stable@vger.kernel.org
Fixes: 65294c1f2c
"nfsd: add a new struct file caching facility to nfsd"
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
e44b4bf264
commit
28c7d86bb6
@ -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 @@ wait_for_construction:
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user