NFSv4: Treat ENETUNREACH errors as fatal for state recovery

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>
This commit is contained in:
Trond Myklebust 2025-03-24 20:35:33 -04:00
parent c81d5bcb7b
commit 0af5fb5ed3

View File

@ -2739,7 +2739,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);