git: 3393002307ad - stable/14 - nfs_commonkrpc.c: Handle NFSERR_DELAY for Sequence correctly
Rick Macklem <[email protected]> Mon, 03 Aug 2026 01:10:43 +0000
| Newsgroups | gmane.os.freebsd.devel.cvs.src |
|---|---|
| Message-ID | <6a6fea93.2199d.50c41481__7387.49474273703$1785719476$gmane$org@gitrepo.freebsd.org> |
The branch stable/14 has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=3393002307adefac3ad21482853c32a53d4a424c commit 3393002307adefac3ad21482853c32a53d4a424c Author: Rick Macklem <[email protected]> AuthorDate: 2026-07-27 14:16:29 +0000 Commit: Rick Macklem <[email protected]> CommitDate: 2026-08-03 01:09:08 +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 7a256366de2e..28f83f460245 100644 --- a/sys/fs/nfs/nfs_commonkrpc.c +++ b/sys/fs/nfs/nfs_commonkrpc.c @@ -1127,7 +1127,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 |=