]> git.dujemihanovic.xyz Git - linux.git/commitdiff
nfsd: be more systematic about selecting error codes for internal use.
authorNeilBrown <neilb@suse.de>
Mon, 29 Jul 2024 01:47:23 +0000 (11:47 +1000)
committerChuck Lever <chuck.lever@oracle.com>
Fri, 20 Sep 2024 23:31:03 +0000 (19:31 -0400)
Rather than using ad hoc values for internal errors (30000, 11000, ...)
use 'enum' to sequentially allocate numbers starting from the first
known available number - now visible as NFS4ERR_FIRST_FREE.

The goal is values that are distinct from all be32 error codes.  To get
those we must first select integers that are not already used, then
convert them with cpu_to_be32().

Signed-off-by: NeilBrown <neilb@suse.de>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/nfsd.h
include/linux/nfs4.h

index 8750ade0a7ee4084b76dd2f6189f6d51902ef817..11825cbe4360906d42949e2ff4f3834d70baa205 100644 (file)
@@ -330,17 +330,31 @@ void              nfsd_lockd_shutdown(void);
 #define nfserr_xattr2big               cpu_to_be32(NFS4ERR_XATTR2BIG)
 #define nfserr_noxattr                 cpu_to_be32(NFS4ERR_NOXATTR)
 
-/* error codes for internal use */
+/*
+ * Error codes for internal use.  We use enum to choose numbers that are
+ * not already assigned, then covert to be32 resulting in a number that
+ * cannot conflict with any existing be32 nfserr value.
+ */
+enum {
+       NFSERR_DROPIT = NFS4ERR_FIRST_FREE,
 /* if a request fails due to kmalloc failure, it gets dropped.
  *  Client should resend eventually
  */
-#define        nfserr_dropit           cpu_to_be32(30000)
+#define        nfserr_dropit           cpu_to_be32(NFSERR_DROPIT)
+
 /* end-of-file indicator in readdir */
-#define        nfserr_eof              cpu_to_be32(30001)
+       NFSERR_EOF,
+#define        nfserr_eof              cpu_to_be32(NFSERR_EOF)
+
 /* replay detected */
-#define        nfserr_replay_me        cpu_to_be32(11001)
+       NFSERR_REPLAY_ME,
+#define        nfserr_replay_me        cpu_to_be32(NFSERR_REPLAY_ME)
+
 /* nfs41 replay detected */
-#define        nfserr_replay_cache     cpu_to_be32(11002)
+       NFSERR_REPLAY_CACHE,
+#define        nfserr_replay_cache     cpu_to_be32(NFSERR_REPLAY_CACHE)
+
+};
 
 /* Check for dir entries '.' and '..' */
 #define isdotent(n, l) (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.'))
index f9df88091c6d7077f9cbefeff09cbbe135142e69..8d7430d9f2183f08fc995b12370d0ddddf0bffba 100644 (file)
@@ -281,15 +281,18 @@ enum nfsstat4 {
        /* nfs42 */
        NFS4ERR_PARTNER_NOTSUPP = 10088,
        NFS4ERR_PARTNER_NO_AUTH = 10089,
-       NFS4ERR_UNION_NOTSUPP = 10090,
-       NFS4ERR_OFFLOAD_DENIED = 10091,
-       NFS4ERR_WRONG_LFS = 10092,
-       NFS4ERR_BADLABEL = 10093,
-       NFS4ERR_OFFLOAD_NO_REQS = 10094,
+       NFS4ERR_UNION_NOTSUPP   = 10090,
+       NFS4ERR_OFFLOAD_DENIED  = 10091,
+       NFS4ERR_WRONG_LFS       = 10092,
+       NFS4ERR_BADLABEL        = 10093,
+       NFS4ERR_OFFLOAD_NO_REQS = 10094,
 
        /* xattr (RFC8276) */
-       NFS4ERR_NOXATTR        = 10095,
-       NFS4ERR_XATTR2BIG      = 10096,
+       NFS4ERR_NOXATTR         = 10095,
+       NFS4ERR_XATTR2BIG       = 10096,
+
+       /* can be used for internal errors */
+       NFS4ERR_FIRST_FREE
 };
 
 /* error codes for internal client use */