]> www.infradead.org Git - users/hch/misc.git/commitdiff
NFSD: Relocate the fh_want_write() and fh_drop_write() helpers
authorChuck Lever <chuck.lever@oracle.com>
Wed, 2 Jul 2025 23:33:44 +0000 (19:33 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Sun, 21 Sep 2025 23:24:50 +0000 (19:24 -0400)
Clean up: these helpers are part of the NFSD file handle API.
Relocate them to fs/nfsd/nfsfh.h.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfsfh.h
fs/nfsd/vfs.h

index 1cf9797225210c072b92236625efcfd4f5d45e93..6f5255d1c1903fc7e5d30ae00c649885d054d2d7 100644 (file)
@@ -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
index eff04959606fe55c141ab4a2eed97c7e0716a5f5..4007dcbbbfefa412032268e1e51d477607064a6f 100644 (file)
@@ -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;