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>