]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
NFSv4: Treat ENETUNREACH errors as fatal for state recovery
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Tue, 25 Mar 2025 00:35:33 +0000 (20:35 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Jun 2025 12:36:59 +0000 (14:36 +0200)
[ Upstream commit 0af5fb5ed3d2fd9e110c6112271f022b744a849a ]

If a containerised process is killed and causes an ENETUNREACH or
ENETDOWN error to be propagated to the state manager, then mark the
nfs_client as being dead so that we don't loop in functions that are
expecting recovery to succeed.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/nfs/nfs4state.c

index 807dd6f17e1bdb672d82ffe70b3894ea13d8c4ce..e3cabced1aead73585d9640bb4791902da71a678 100644 (file)
@@ -2719,7 +2719,15 @@ out_error:
        pr_warn_ratelimited("NFS: state manager%s%s failed on NFSv4 server %s"
                        " with error %d\n", section_sep, section,
                        clp->cl_hostname, -status);
-       ssleep(1);
+       switch (status) {
+       case -ENETDOWN:
+       case -ENETUNREACH:
+               nfs_mark_client_ready(clp, -EIO);
+               break;
+       default:
+               ssleep(1);
+               break;
+       }
 out_drain:
        memalloc_nofs_restore(memflags);
        nfs4_end_drain_session(clp);