All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chuck Lever <cel@kernel.org>
To: NeilBrown <neil@brown.name>, Jeff Layton <jlayton@kernel.org>,
	Olga Kornievskaia <okorniev@redhat.com>,
	Dai Ngo <dai.ngo@oracle.com>, Tom Talpey <tom@talpey.com>
Cc: <linux-nfs@vger.kernel.org>
Subject: [PATCH 2/2] NFSD: Rework be32 nfserr definitions
Date: Wed, 26 Aug 2026 15:44:44 -0400	[thread overview]
Message-ID: <20260826194444.148243-2-cel@kernel.org> (raw)
In-Reply-To: <20260826194444.148243-1-cel@kernel.org>

fs/nfsd/nfserr.h builds NFSD's internal __be32 nfserr_* values
by wrapping the version-agnostic NFSERR_* status codes from
uapi/linux/nfs.h in cpu_to_be32(), which it reaches through its
include of linux/nfs.h.

A subsequent patch replaces that include with the xdrgen-generated
linux/sunrpc/xdrgen/nfs2.h. The generated header re-supplies
only the eighteen NFSv2 status codes; the NFSv3 and NFSv4 codes
that nfserr.h also uses (NFSERR_INVAL, NFSERR_JUKEBOX,
NFSERR_RESOURCE, and the rest) would be left undeclared.

Respell those definitions in terms of the version-specific
NFS3ERR_* and NFS4ERR_* codes from linux/nfs3.h and linux/nfs4.h,
and switch the one bare NFSERR_MOVED in nfs4xdr.c to NFS4ERR_MOVED.
The wire values are unchanged; NFSD no longer depends on the
version-agnostic NFSv3 and NFSv4 names.

Signed-off-by: Chuck Lever <cel@kernel.org>
---
 fs/nfsd/nfs4xdr.c |   2 +-
 fs/nfsd/nfserr.h  | 129 +++++++++++++++++++++++-----------------------
 2 files changed, 66 insertions(+), 65 deletions(-)

diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 5bfbeb87394e..00ddaac499c6 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -3213,7 +3213,7 @@ static __be32 fattr_handle_absent_fs(u32 *bmval0, u32 *bmval1, u32 *bmval2, u32
 	    *bmval1 & ~WORD1_ABSENT_FS_ATTRS) {
 		if (*bmval0 & FATTR4_WORD0_RDATTR_ERROR ||
 	            *bmval0 & FATTR4_WORD0_FS_LOCATIONS)
-			*rdattr_err = NFSERR_MOVED;
+			*rdattr_err = NFS4ERR_MOVED;
 		else
 			return nfserr_moved;
 	}
diff --git a/fs/nfsd/nfserr.h b/fs/nfsd/nfserr.h
index 9b9df7aab220..d1c434b834b2 100644
--- a/fs/nfsd/nfserr.h
+++ b/fs/nfsd/nfserr.h
@@ -11,76 +11,77 @@
 #define LINUX_NFSD_NFSERR_H
 
 #include <linux/nfs.h>
+#include <linux/nfs3.h>
 #include <linux/nfs4.h>
 
 /*
  * These macros provide pre-xdr'ed values for faster operation.
  */
-#define	nfs_ok			cpu_to_be32(NFS_OK)
-#define	nfserr_perm		cpu_to_be32(NFSERR_PERM)
-#define	nfserr_noent		cpu_to_be32(NFSERR_NOENT)
-#define	nfserr_io		cpu_to_be32(NFSERR_IO)
-#define	nfserr_nxio		cpu_to_be32(NFSERR_NXIO)
-#define	nfserr_acces		cpu_to_be32(NFSERR_ACCES)
-#define	nfserr_exist		cpu_to_be32(NFSERR_EXIST)
-#define	nfserr_xdev		cpu_to_be32(NFSERR_XDEV)
-#define	nfserr_nodev		cpu_to_be32(NFSERR_NODEV)
-#define	nfserr_notdir		cpu_to_be32(NFSERR_NOTDIR)
-#define	nfserr_isdir		cpu_to_be32(NFSERR_ISDIR)
-#define	nfserr_inval		cpu_to_be32(NFSERR_INVAL)
-#define	nfserr_fbig		cpu_to_be32(NFSERR_FBIG)
-#define	nfserr_nospc		cpu_to_be32(NFSERR_NOSPC)
-#define	nfserr_rofs		cpu_to_be32(NFSERR_ROFS)
-#define	nfserr_mlink		cpu_to_be32(NFSERR_MLINK)
-#define	nfserr_nametoolong	cpu_to_be32(NFSERR_NAMETOOLONG)
-#define	nfserr_notempty		cpu_to_be32(NFSERR_NOTEMPTY)
-#define	nfserr_dquot		cpu_to_be32(NFSERR_DQUOT)
-#define	nfserr_stale		cpu_to_be32(NFSERR_STALE)
-#define	nfserr_remote		cpu_to_be32(NFSERR_REMOTE)
-#define	nfserr_wflush		cpu_to_be32(NFSERR_WFLUSH)
-#define	nfserr_badhandle	cpu_to_be32(NFSERR_BADHANDLE)
-#define	nfserr_notsync		cpu_to_be32(NFSERR_NOT_SYNC)
-#define	nfserr_badcookie	cpu_to_be32(NFSERR_BAD_COOKIE)
-#define	nfserr_notsupp		cpu_to_be32(NFSERR_NOTSUPP)
-#define	nfserr_toosmall		cpu_to_be32(NFSERR_TOOSMALL)
-#define	nfserr_serverfault	cpu_to_be32(NFSERR_SERVERFAULT)
-#define	nfserr_badtype		cpu_to_be32(NFSERR_BADTYPE)
-#define	nfserr_jukebox		cpu_to_be32(NFSERR_JUKEBOX)
-#define	nfserr_denied		cpu_to_be32(NFSERR_DENIED)
-#define	nfserr_deadlock		cpu_to_be32(NFSERR_DEADLOCK)
-#define nfserr_expired          cpu_to_be32(NFSERR_EXPIRED)
-#define	nfserr_bad_cookie	cpu_to_be32(NFSERR_BAD_COOKIE)
-#define	nfserr_same		cpu_to_be32(NFSERR_SAME)
-#define	nfserr_clid_inuse	cpu_to_be32(NFSERR_CLID_INUSE)
-#define	nfserr_stale_clientid	cpu_to_be32(NFSERR_STALE_CLIENTID)
-#define	nfserr_resource		cpu_to_be32(NFSERR_RESOURCE)
-#define	nfserr_moved		cpu_to_be32(NFSERR_MOVED)
-#define	nfserr_nofilehandle	cpu_to_be32(NFSERR_NOFILEHANDLE)
-#define	nfserr_minor_vers_mismatch	cpu_to_be32(NFSERR_MINOR_VERS_MISMATCH)
-#define nfserr_share_denied	cpu_to_be32(NFSERR_SHARE_DENIED)
-#define nfserr_stale_stateid	cpu_to_be32(NFSERR_STALE_STATEID)
-#define nfserr_old_stateid	cpu_to_be32(NFSERR_OLD_STATEID)
-#define nfserr_bad_stateid	cpu_to_be32(NFSERR_BAD_STATEID)
-#define nfserr_bad_seqid	cpu_to_be32(NFSERR_BAD_SEQID)
-#define	nfserr_symlink		cpu_to_be32(NFSERR_SYMLINK)
-#define	nfserr_not_same		cpu_to_be32(NFSERR_NOT_SAME)
-#define nfserr_lock_range	cpu_to_be32(NFSERR_LOCK_RANGE)
-#define	nfserr_restorefh	cpu_to_be32(NFSERR_RESTOREFH)
-#define	nfserr_attrnotsupp	cpu_to_be32(NFSERR_ATTRNOTSUPP)
-#define	nfserr_bad_xdr		cpu_to_be32(NFSERR_BAD_XDR)
-#define	nfserr_openmode		cpu_to_be32(NFSERR_OPENMODE)
-#define	nfserr_badowner		cpu_to_be32(NFSERR_BADOWNER)
-#define	nfserr_locks_held	cpu_to_be32(NFSERR_LOCKS_HELD)
-#define	nfserr_op_illegal	cpu_to_be32(NFSERR_OP_ILLEGAL)
-#define	nfserr_grace		cpu_to_be32(NFSERR_GRACE)
-#define	nfserr_no_grace		cpu_to_be32(NFSERR_NO_GRACE)
-#define	nfserr_reclaim_bad	cpu_to_be32(NFSERR_RECLAIM_BAD)
-#define	nfserr_badname		cpu_to_be32(NFSERR_BADNAME)
-#define	nfserr_admin_revoked	cpu_to_be32(NFS4ERR_ADMIN_REVOKED)
-#define	nfserr_cb_path_down	cpu_to_be32(NFSERR_CB_PATH_DOWN)
-#define	nfserr_locked		cpu_to_be32(NFSERR_LOCKED)
-#define	nfserr_wrongsec		cpu_to_be32(NFSERR_WRONGSEC)
+#define	nfs_ok				cpu_to_be32(NFS_OK)
+#define	nfserr_perm			cpu_to_be32(NFSERR_PERM)
+#define	nfserr_noent			cpu_to_be32(NFSERR_NOENT)
+#define	nfserr_io			cpu_to_be32(NFSERR_IO)
+#define	nfserr_nxio			cpu_to_be32(NFSERR_NXIO)
+#define	nfserr_acces			cpu_to_be32(NFSERR_ACCES)
+#define	nfserr_exist			cpu_to_be32(NFSERR_EXIST)
+#define	nfserr_xdev			cpu_to_be32(NFS3ERR_XDEV)
+#define	nfserr_nodev			cpu_to_be32(NFSERR_NODEV)
+#define	nfserr_notdir			cpu_to_be32(NFSERR_NOTDIR)
+#define	nfserr_isdir			cpu_to_be32(NFSERR_ISDIR)
+#define	nfserr_inval			cpu_to_be32(NFS3ERR_INVAL)
+#define	nfserr_fbig			cpu_to_be32(NFSERR_FBIG)
+#define	nfserr_nospc			cpu_to_be32(NFSERR_NOSPC)
+#define	nfserr_rofs			cpu_to_be32(NFSERR_ROFS)
+#define	nfserr_mlink			cpu_to_be32(NFS3ERR_MLINK)
+#define	nfserr_nametoolong		cpu_to_be32(NFSERR_NAMETOOLONG)
+#define	nfserr_notempty			cpu_to_be32(NFSERR_NOTEMPTY)
+#define	nfserr_dquot			cpu_to_be32(NFSERR_DQUOT)
+#define	nfserr_stale			cpu_to_be32(NFSERR_STALE)
+#define	nfserr_remote			cpu_to_be32(NFS3ERR_REMOTE)
+#define	nfserr_wflush			cpu_to_be32(NFSERR_WFLUSH)
+#define	nfserr_badhandle		cpu_to_be32(NFS3ERR_BADHANDLE)
+#define	nfserr_notsync			cpu_to_be32(NFS3ERR_NOT_SYNC)
+#define	nfserr_badcookie		cpu_to_be32(NFS3ERR_BAD_COOKIE)
+#define	nfserr_notsupp			cpu_to_be32(NFS3ERR_NOTSUPP)
+#define	nfserr_toosmall			cpu_to_be32(NFS3ERR_TOOSMALL)
+#define	nfserr_serverfault		cpu_to_be32(NFS3ERR_SERVERFAULT)
+#define	nfserr_badtype			cpu_to_be32(NFS3ERR_BADTYPE)
+#define	nfserr_jukebox			cpu_to_be32(NFS3ERR_JUKEBOX)
 #define nfserr_delay			cpu_to_be32(NFS4ERR_DELAY)
+#define	nfserr_same			cpu_to_be32(NFS4ERR_SAME)
+#define	nfserr_denied			cpu_to_be32(NFS4ERR_DENIED)
+#define	nfserr_deadlock			cpu_to_be32(NFS4ERR_DEADLOCK)
+#define	nfserr_expired			cpu_to_be32(NFS4ERR_EXPIRED)
+#define	nfserr_bad_cookie		cpu_to_be32(NFS4ERR_BAD_COOKIE)
+#define	nfserr_clid_inuse		cpu_to_be32(NFS4ERR_CLID_INUSE)
+#define	nfserr_stale_clientid		cpu_to_be32(NFS4ERR_STALE_CLIENTID)
+#define	nfserr_resource			cpu_to_be32(NFS4ERR_RESOURCE)
+#define	nfserr_moved			cpu_to_be32(NFS4ERR_MOVED)
+#define	nfserr_nofilehandle		cpu_to_be32(NFS4ERR_NOFILEHANDLE)
+#define	nfserr_minor_vers_mismatch	cpu_to_be32(NFS4ERR_MINOR_VERS_MISMATCH)
+#define nfserr_share_denied		cpu_to_be32(NFS4ERR_SHARE_DENIED)
+#define nfserr_stale_stateid		cpu_to_be32(NFS4ERR_STALE_STATEID)
+#define nfserr_old_stateid		cpu_to_be32(NFS4ERR_OLD_STATEID)
+#define nfserr_bad_stateid		cpu_to_be32(NFS4ERR_BAD_STATEID)
+#define nfserr_bad_seqid		cpu_to_be32(NFS4ERR_BAD_SEQID)
+#define	nfserr_symlink			cpu_to_be32(NFS4ERR_SYMLINK)
+#define	nfserr_not_same			cpu_to_be32(NFS4ERR_NOT_SAME)
+#define nfserr_lock_range		cpu_to_be32(NFS4ERR_LOCK_RANGE)
+#define	nfserr_restorefh		cpu_to_be32(NFS4ERR_RESTOREFH)
+#define	nfserr_attrnotsupp		cpu_to_be32(NFS4ERR_ATTRNOTSUPP)
+#define	nfserr_bad_xdr			cpu_to_be32(NFS4ERR_BADXDR)
+#define	nfserr_openmode			cpu_to_be32(NFS4ERR_OPENMODE)
+#define	nfserr_badowner			cpu_to_be32(NFS4ERR_BADOWNER)
+#define	nfserr_locks_held		cpu_to_be32(NFS4ERR_LOCKS_HELD)
+#define	nfserr_op_illegal		cpu_to_be32(NFS4ERR_OP_ILLEGAL)
+#define	nfserr_grace			cpu_to_be32(NFS4ERR_GRACE)
+#define	nfserr_no_grace			cpu_to_be32(NFS4ERR_NO_GRACE)
+#define	nfserr_reclaim_bad		cpu_to_be32(NFS4ERR_RECLAIM_BAD)
+#define	nfserr_badname			cpu_to_be32(NFS4ERR_BADNAME)
+#define	nfserr_admin_revoked		cpu_to_be32(NFS4ERR_ADMIN_REVOKED)
+#define	nfserr_cb_path_down		cpu_to_be32(NFS4ERR_CB_PATH_DOWN)
+#define	nfserr_locked			cpu_to_be32(NFS4ERR_LOCKED)
+#define	nfserr_wrongsec			cpu_to_be32(NFS4ERR_WRONGSEC)
 #define nfserr_badiomode		cpu_to_be32(NFS4ERR_BADIOMODE)
 #define nfserr_badlayout		cpu_to_be32(NFS4ERR_BADLAYOUT)
 #define nfserr_bad_session_digest	cpu_to_be32(NFS4ERR_BAD_SESSION_DIGEST)
-- 
2.55.0


  reply	other threads:[~2026-08-26 19:44 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-26 19:44 [PATCH 1/2] NFS: Import NFS3ERR definitions Chuck Lever
2026-08-26 19:44 ` Chuck Lever [this message]
2026-08-28 14:42   ` [PATCH 2/2] NFSD: Rework be32 nfserr definitions Jeff Layton
2026-08-28 14:42 ` [PATCH 1/2] NFS: Import NFS3ERR definitions Jeff Layton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260826194444.148243-2-cel@kernel.org \
    --to=cel@kernel.org \
    --cc=dai.ngo@oracle.com \
    --cc=jlayton@kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=neil@brown.name \
    --cc=okorniev@redhat.com \
    --cc=tom@talpey.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.