Re: [PATCH] NFSD: Fix nfs4_delegation_stat()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 2024-09-09 at 10:15 -0400, cel@xxxxxxxxxx wrote:
> 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;
>  }
>  
>  /*

Mea culpa!

Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>





[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux