summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2025-03-24 20:35:33 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-06-04 14:41:55 +0200
commit6b8beb8104d738bcd0ba1699de34ae48c9ae5868 (patch)
treec1b2903192d9a481f2cea6f2f0ae88d9975ff153 /fs
parentee68e068cf92f8192ef61557789a6bb7f4b49ce0 (diff)
downloadlinux-6b8beb8104d738bcd0ba1699de34ae48c9ae5868.tar.gz
linux-6b8beb8104d738bcd0ba1699de34ae48c9ae5868.tar.bz2
linux-6b8beb8104d738bcd0ba1699de34ae48c9ae5868.zip
NFSv4: Treat ENETUNREACH errors as fatal for state recovery
[ 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>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/nfs4state.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 794bb4aa588d..9fc71dc090c2 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -2741,7 +2741,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);