Commit c926f029 authored by Chuck Lever's avatar Chuck Lever
Browse files

NFSD: Relocate the fh_want_write() and fh_drop_write() helpers



Clean up: these helpers are part of the NFSD file handle API.
Relocate them to fs/nfsd/nfsfh.h.

Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 6df164e2
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -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
+0 −20
Original line number Diff line number Diff line
@@ -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;