NFSD: Remove NFSERR_EAGAIN
authorChuck Lever <chuck.lever@oracle.com>
Wed, 10 Dec 2025 00:28:49 +0000 (19:28 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Fri, 2 Jan 2026 18:43:41 +0000 (13:43 -0500)
I haven't found an NFSERR_EAGAIN in RFCs 1094, 1813, 7530, or 8881.
None of these RFCs have an NFS status code that match the numeric
value "11".

Based on the meaning of the EAGAIN errno, I presume the use of this
status in NFSD means NFS4ERR_DELAY. So replace the one usage of
nfserr_eagain, and remove it from NFSD's NFS status conversion
tables.

As far as I can tell, NFSERR_EAGAIN has existed since the pre-git
era, but was not actually used by any code until commit f4e44b393389
("NFSD: delay unmount source's export after inter-server copy
completed."), at which time it become possible for NFSD to return
a status code of 11 (which is not valid NFS protocol).

Fixes: f4e44b393389 ("NFSD: delay unmount source's export after inter-server copy completed.")
Cc: stable@vger.kernel.org
Reviewed-by: NeilBrown <neil@brown.name>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfs_common/common.c
fs/nfsd/nfs4proc.c
fs/nfsd/nfsd.h
include/trace/misc/nfs.h
include/uapi/linux/nfs.h

index af09aed..0778743 100644 (file)
@@ -17,7 +17,6 @@ static const struct {
        { NFSERR_NOENT,         -ENOENT         },
        { NFSERR_IO,            -EIO            },
        { NFSERR_NXIO,          -ENXIO          },
-/*     { NFSERR_EAGAIN,        -EAGAIN         }, */
        { NFSERR_ACCES,         -EACCES         },
        { NFSERR_EXIST,         -EEXIST         },
        { NFSERR_XDEV,          -EXDEV          },
index 7f7e6bb..42a6b91 100644 (file)
@@ -1506,7 +1506,7 @@ try_again:
                                        (schedule_timeout(20*HZ) == 0)) {
                                finish_wait(&nn->nfsd_ssc_waitq, &wait);
                                kfree(work);
-                               return nfserr_eagain;
+                               return nfserr_jukebox;
                        }
                        finish_wait(&nn->nfsd_ssc_waitq, &wait);
                        goto try_again;
index 50be785..b028321 100644 (file)
@@ -233,7 +233,6 @@ void                nfsd_lockd_shutdown(void);
 #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_eagain           cpu_to_be32(NFSERR_EAGAIN)
 #define        nfserr_acces            cpu_to_be32(NFSERR_ACCES)
 #define        nfserr_exist            cpu_to_be32(NFSERR_EXIST)
 #define        nfserr_xdev             cpu_to_be32(NFSERR_XDEV)
index c82233e..a394b4d 100644 (file)
@@ -16,7 +16,6 @@ TRACE_DEFINE_ENUM(NFSERR_PERM);
 TRACE_DEFINE_ENUM(NFSERR_NOENT);
 TRACE_DEFINE_ENUM(NFSERR_IO);
 TRACE_DEFINE_ENUM(NFSERR_NXIO);
-TRACE_DEFINE_ENUM(NFSERR_EAGAIN);
 TRACE_DEFINE_ENUM(NFSERR_ACCES);
 TRACE_DEFINE_ENUM(NFSERR_EXIST);
 TRACE_DEFINE_ENUM(NFSERR_XDEV);
@@ -52,7 +51,6 @@ TRACE_DEFINE_ENUM(NFSERR_JUKEBOX);
                { NFSERR_NXIO,                  "NXIO" }, \
                { ECHILD,                       "CHILD" }, \
                { ETIMEDOUT,                    "TIMEDOUT" }, \
-               { NFSERR_EAGAIN,                "AGAIN" }, \
                { NFSERR_ACCES,                 "ACCES" }, \
                { NFSERR_EXIST,                 "EXIST" }, \
                { NFSERR_XDEV,                  "XDEV" }, \
index f356f2b..71c7196 100644 (file)
@@ -49,7 +49,6 @@
        NFSERR_NOENT = 2,               /* v2 v3 v4 */
        NFSERR_IO = 5,                  /* v2 v3 v4 */
        NFSERR_NXIO = 6,                /* v2 v3 v4 */
-       NFSERR_EAGAIN = 11,             /* v2 v3 */
        NFSERR_ACCES = 13,              /* v2 v3 v4 */
        NFSERR_EXIST = 17,              /* v2 v3 v4 */
        NFSERR_XDEV = 18,               /*    v3 v4 */