On 25 Jan 2024, at 11:29, Chuck Lever wrote: > From: Chuck Lever <chuck.lever@xxxxxxxxxx> > > Help observe the flow of callback operations. > > bc_shutdown() records exactly when the backchannel RPC client is > destroyed and cl_cb_client is replaced with NULL. > > Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> > --- > fs/nfsd/nfs4callback.c | 7 +++++++ > fs/nfsd/trace.h | 42 ++++++++++++++++++++++++++++++++++++++++++ > include/trace/misc/nfs.h | 34 ++++++++++++++++++++++++++++++++++ > 3 files changed, 83 insertions(+) > > diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c > index 1c85426830b1..4d5a6370b92c 100644 > --- a/fs/nfsd/nfs4callback.c > +++ b/fs/nfsd/nfs4callback.c > @@ -887,6 +887,7 @@ static struct workqueue_struct *callback_wq; > > static bool nfsd4_queue_cb(struct nfsd4_callback *cb) > { > + trace_nfsd_cb_queue(cb->cb_clp, cb); > return queue_work(callback_wq, &cb->cb_work); > } > > @@ -1106,6 +1107,7 @@ static void nfsd41_destroy_cb(struct nfsd4_callback *cb) > { > struct nfs4_client *clp = cb->cb_clp; > > + trace_nfsd_cb_destroy(clp, cb); > nfsd41_cb_release_slot(cb); > if (cb->cb_ops && cb->cb_ops->release) > cb->cb_ops->release(cb); > @@ -1220,6 +1222,7 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback > goto out; > need_restart: > if (!test_bit(NFSD4_CLIENT_CB_KILL, &clp->cl_flags)) { > + trace_nfsd_cb_restart(clp, cb); > task->tk_status = 0; > cb->cb_need_restart = true; I think you want to call the tracepoint /after/ setting cb_need_restart here.. > } > @@ -1333,11 +1336,14 @@ static void nfsd4_process_cb_update(struct nfsd4_callback *cb) > struct nfsd4_conn *c; > int err; > > + trace_nfsd_cb_bc_update(clp, cb); > + > /* > * This is either an update, or the client dying; in either case, > * kill the old client: > */ > if (clp->cl_cb_client) { > + trace_nfsd_cb_bc_shutdown(clp, cb); > rpc_shutdown_client(clp->cl_cb_client); > clp->cl_cb_client = NULL; > put_cred(clp->cl_cb_cred); > @@ -1349,6 +1355,7 @@ static void nfsd4_process_cb_update(struct nfsd4_callback *cb) > } > if (test_bit(NFSD4_CLIENT_CB_KILL, &clp->cl_flags)) > return; > + I'm in favor of this whitespace change, but did you mean to include it? Ben