git: 25d1f68e513b - stable/15 - nfs_commonkrpc.c: Handle NFSERR_DELAY for Sequence correctly
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 03 Aug 2026 01:05:02 UTC
The branch stable/15 has been updated by rmacklem:
URL: https://cgit.FreeBSD.org/src/commit/?id=25d1f68e513bb567497de26cb65840f434f227ee
commit 25d1f68e513bb567497de26cb65840f434f227ee
Author: Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2026-07-27 14:16:29 +0000
Commit: Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2026-08-03 01:01:39 +0000
nfs_commonkrpc.c: Handle NFSERR_DELAY for Sequence correctly
Unlike RFC5661 (the original NFSv4.1 RFC), RFC8881 specifies
that a NFS4ERR_DELAY reply to the SEQUENCE operation requires
a reply using the same slot/sequence#.
This patch fixes handling of this case, so it conforms to
RFC8881.
(cherry picked from commit 6901cbbd5a2c00d378a7f87426b36d6ee6ce0aa2)
---
sys/fs/nfs/nfs_commonkrpc.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/sys/fs/nfs/nfs_commonkrpc.c b/sys/fs/nfs/nfs_commonkrpc.c
index f30ae7cbffa2..dd189a4aa909 100644
--- a/sys/fs/nfs/nfs_commonkrpc.c
+++ b/sys/fs/nfs/nfs_commonkrpc.c
@@ -1145,7 +1145,20 @@ tryagain:
if ((nmp != NULL && i == NFSV4OP_SEQUENCE && j != 0) ||
(clp != NULL && i == NFSV4OP_CBSEQUENCE && j != 0)) {
NFSCL_DEBUG(1, "failed seq=%d\n", j);
- if (sep != NULL && i == NFSV4OP_SEQUENCE &&
+ KASSERT(slot == -1, ("newnfs_request: slot not"
+ " -1"));
+ /*
+ * RFC8881 (unlike RFC5661) specifies that a
+ * NFSERR_DELAY reply to SEQUENCE is handled
+ * by a retry with same slot/sequence#.
+ * (Although not explicit, I will assume this
+ * applies to CB_SEQUENCE as well.)
+ */
+ if (j == NFSERR_DELAY) {
+ nd->nd_repstat =
+ NFSERR_RETRYUNCACHEDREP;
+ } else if (sep != NULL &&
+ i == NFSV4OP_SEQUENCE &&
j == NFSERR_SEQMISORDERED) {
mtx_lock(&sep->nfsess_mtx);
sep->nfsess_badslots |=