> On Mar 4, 2022, at 7:37 PM, Dai Ngo <dai.ngo@xxxxxxxxxx> wrote: > > Update find_in_sessionid_hashtbl to: > . skip client with CLIENT_EXPIRED flag; discarded courtesy client. > . if courtesy client was found then clear CLIENT_COURTESY and > set CLIENT_RECONNECTED so callers can take appropriate action. > > Update nfsd4_sequence and nfsd4_bind_conn_to_session to create client > record for client with CLIENT_RECONNECTED set. > > Update nfsd4_destroy_session to discard client with CLIENT_RECONNECTED > set. > > Signed-off-by: Dai Ngo <dai.ngo@xxxxxxxxxx> > --- > fs/nfsd/nfs4state.c | 34 ++++++++++++++++++++++++++++++++-- > 1 file changed, 32 insertions(+), 2 deletions(-) > > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c > index f42d72a8f5ca..34a59c6f446c 100644 > --- a/fs/nfsd/nfs4state.c > +++ b/fs/nfsd/nfs4state.c > @@ -1963,13 +1963,22 @@ find_in_sessionid_hashtbl(struct nfs4_sessionid *sessionid, struct net *net, > { > struct nfsd4_session *session; > __be32 status = nfserr_badsession; > + struct nfs4_client *clp; > > session = __find_in_sessionid_hashtbl(sessionid, net); > if (!session) > goto out; > + clp = session->se_client; > + if (clp && nfs4_is_courtesy_client_expired(clp)) { > + session = NULL; > + goto out; > + } > status = nfsd4_get_session_locked(session); > - if (status) > + if (status) { > session = NULL; > + if (clp && test_bit(NFSD4_CLIENT_COURTESY, &clp->cl_flags)) > + nfsd4_discard_courtesy_clnt(clp); > + } Here and above: I'm not seeing how @clp can be NULL, but I'm kind of new to fs/nfsd/nfs4state.c. -- Chuck Lever