Message ID | 4855d263e403a8b56738f2f630954348718d7cc5.1742863168.git.trond.myklebust@hammerspace.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Ensure that ENETUNREACH terminates state recovery | expand |
On Mon, 2025-03-24 at 20:46 -0400, trondmy@kernel.org wrote: > From: Trond Myklebust <trond.myklebust@hammerspace.com> > > 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. > > Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> > --- > fs/nfs/nfs4state.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c > index 738eb2789266..629578dd4a42 100644 > --- a/fs/nfs/nfs4state.c > +++ b/fs/nfs/nfs4state.c > @@ -2739,7 +2739,15 @@ static void nfs4_state_manager(struct > nfs_client *clp) > 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, status); Actually, that probably needs to be nfs_mark_client_ready(clp, -EIO) in order to make the return value a fatal I/O error. > + break; > + default: > + ssleep(1); > + break; > + } > out_drain: > memalloc_nofs_restore(memflags); > nfs4_end_drain_session(clp);
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 738eb2789266..629578dd4a42 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -2739,7 +2739,15 @@ static void nfs4_state_manager(struct nfs_client *clp) 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, status); + break; + default: + ssleep(1); + break; + } out_drain: memalloc_nofs_restore(memflags); nfs4_end_drain_session(clp);