Re: [RFC PATCH v2 1/8] NFSD: Relocate the fh_want_write() and fh_drop_write() helpers

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

 



On Tue, 2025-07-08 at 12:06 -0400, Mike Snitzer wrote:
> From: Chuck Lever <chuck.lever@xxxxxxxxxx>
> 
> Clean up: These helpers are part of the NFSD file handle API.
> Relocate them to fs/nfsd/nfsfh.h.
> 
> Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
> Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx>
> ---
>  fs/nfsd/nfsfh.h | 37 +++++++++++++++++++++++++++++++++++++
>  fs/nfsd/vfs.h   | 20 --------------------
>  2 files changed, 37 insertions(+), 20 deletions(-)
> 
> diff --git a/fs/nfsd/nfsfh.h b/fs/nfsd/nfsfh.h
> index 1cf979722521..6f5255d1c190 100644
> --- a/fs/nfsd/nfsfh.h
> +++ b/fs/nfsd/nfsfh.h
> @@ -14,6 +14,8 @@
>  #include <linux/exportfs.h>
>  #include <linux/nfs4.h>
>  
> +#include "export.h"
> +
>  /*
>   * The file handle starts with a sequence of four-byte words.
>   * The first word contains a version number (1) and three descriptor bytes
> @@ -271,6 +273,41 @@ static inline bool fh_fsid_match(const struct knfsd_fh *fh1,
>  	return true;
>  }
>  
> +/**
> + * fh_want_write - Get write access to an export
> + * @fhp: File handle of file to be written
> + *
> + * Caller must invoke fh_drop_write() when its write operation
> + * is complete.
> + *
> + * Returns 0 if the file handle's export can be written to. Otherwise
> + * the export is not prepared for updates, and the returned negative
> + * errno value reflects the reason for the failure.
> + */
> +static inline int fh_want_write(struct svc_fh *fhp)
> +{
> +	int ret;
> +
> +	if (fhp->fh_want_write)
> +		return 0;
> +	ret = mnt_want_write(fhp->fh_export->ex_path.mnt);
> +	if (!ret)
> +		fhp->fh_want_write = true;
> +	return ret;
> +}
> +
> +/**
> + * fh_drop_write - Release write access on an export
> + * @fhp: File handle of file on which fh_want_write() was previously called
> + */
> +static inline void fh_drop_write(struct svc_fh *fhp)
> +{
> +	if (fhp->fh_want_write) {
> +		fhp->fh_want_write = false;
> +		mnt_drop_write(fhp->fh_export->ex_path.mnt);
> +	}
> +}
> +
>  /**
>   * knfsd_fh_hash - calculate the crc32 hash for the filehandle
>   * @fh - pointer to filehandle
> diff --git a/fs/nfsd/vfs.h b/fs/nfsd/vfs.h
> index eff04959606f..4007dcbbbfef 100644
> --- a/fs/nfsd/vfs.h
> +++ b/fs/nfsd/vfs.h
> @@ -160,26 +160,6 @@ __be32		nfsd_permission(struct svc_cred *cred, struct svc_export *exp,
>  
>  void		nfsd_filp_close(struct file *fp);
>  
> -static inline int fh_want_write(struct svc_fh *fh)
> -{
> -	int ret;
> -
> -	if (fh->fh_want_write)
> -		return 0;
> -	ret = mnt_want_write(fh->fh_export->ex_path.mnt);
> -	if (!ret)
> -		fh->fh_want_write = true;
> -	return ret;
> -}
> -
> -static inline void fh_drop_write(struct svc_fh *fh)
> -{
> -	if (fh->fh_want_write) {
> -		fh->fh_want_write = false;
> -		mnt_drop_write(fh->fh_export->ex_path.mnt);
> -	}
> -}
> -
>  static inline __be32 fh_getattr(const struct svc_fh *fh, struct kstat *stat)
>  {
>  	u32 request_mask = STATX_BASIC_STATS;

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