From: Chuck Lever <chuck.lever@xxxxxxxxxx> The xfstests workflow on NFSv4.2 exhausts the capacity of both the main and scratch devices (backed by xfs) about half-way through each test run. Deleting all visible files on both devices frees only a little bit of space. The test exports can be unshared but not unmounted (EBUSY). Looks like unlinked but still open files, maybe. Bisected to commit c495f65ad2ff ("nfsd: fix initial getattr on write delegation") Ensure nfsd_file objects acquired by find_rw_file() are released. Fixes: c495f65ad2ff ("nfsd: fix initial getattr on write delegation") Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> --- fs/nfsd/nfs4state.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) Tested, problem no longer reproducible. I intend to squash this into c495f65ad2ff. diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 252297b98a2e..cb5a9ab451c5 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -5920,6 +5920,7 @@ nfs4_delegation_stat(struct nfs4_delegation *dp, struct svc_fh *currentfh, { struct nfsd_file *nf = find_rw_file(dp->dl_stid.sc_file); struct path path; + int rc; if (!nf) return false; @@ -5927,11 +5928,12 @@ nfs4_delegation_stat(struct nfs4_delegation *dp, struct svc_fh *currentfh, path.mnt = currentfh->fh_export->ex_path.mnt; path.dentry = file_dentry(nf->nf_file); - if (vfs_getattr(&path, stat, - (STATX_SIZE | STATX_CTIME | STATX_CHANGE_COOKIE), - AT_STATX_SYNC_AS_STAT)) - return false; - return true; + rc = vfs_getattr(&path, stat, + (STATX_SIZE | STATX_CTIME | STATX_CHANGE_COOKIE), + AT_STATX_SYNC_AS_STAT); + + nfsd_file_put(nf); + return rc == 0; } /* -- 2.45.2