git: ca0dcfd1a8ec - stable/14 - nfs_commonkrpc.c: Fix recovery that was broken by 4d80d4913e79

From: Rick Macklem <rmacklem_at_FreeBSD.org>
Date: Thu, 06 Aug 2026 19:52:47 UTC
The branch stable/14 has been updated by rmacklem:

URL: https://cgit.FreeBSD.org/src/commit/?id=ca0dcfd1a8ecbd7f4f99b06adcb5d67c8742679c

commit ca0dcfd1a8ecbd7f4f99b06adcb5d67c8742679c
Author:     Rick Macklem <rmacklem@FreeBSD.org>
AuthorDate: 2026-08-03 23:57:38 +0000
Commit:     Rick Macklem <rmacklem@FreeBSD.org>
CommitDate: 2026-08-06 19:51:27 +0000

    nfs_commonkrpc.c: Fix recovery that was broken by 4d80d4913e79
    
    Commit 4d80d4913e79 added a check for nfsess_defunct already
    being set.  This was incorrect because, once set, nfsess_defunct
    remains set and an additional recovery might be needed.
    
    This patch reverts this part of 4d80d4913e79.
    
    PR:     297252
    
    (cherry picked from commit 5ab48fb9f7ac43fb1242a678312a02df5d4d5b53)
---
 sys/fs/nfs/nfs_commonkrpc.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/sys/fs/nfs/nfs_commonkrpc.c b/sys/fs/nfs/nfs_commonkrpc.c
index 28f83f460245..e6c09c132a8a 100644
--- a/sys/fs/nfs/nfs_commonkrpc.c
+++ b/sys/fs/nfs/nfs_commonkrpc.c
@@ -1261,9 +1261,15 @@ tryagain:
 				}
 				sep = NFSMNT_MDSSESSION(nmp);
 				if (bcmp(sep->nfsess_sessionid,
-				    nd->nd_sessionid, NFSX_V4SESSIONID) == 0 &&
-				    sep->nfsess_defunct == 0) {
-					/* Initiate recovery. */
+				    nd->nd_sessionid, NFSX_V4SESSIONID) == 0) {
+					/*
+					 * Initiate recovery.  Even if
+					 * nfsess_defunct is already set,
+					 * another recovery may be needed.
+					 * NFSCLFLAGS_RECVRINPRG |
+					 * NFSCLFLAGS_RECOVER should avoid
+					 * recovery storms.
+					 */
 					sep->nfsess_defunct = 1;
 					NFSCL_DEBUG(1, "Marked defunct\n");
 					if (nmp->nm_clp != NULL &&