Commit dc0112e6 authored by Chuck Lever's avatar Chuck Lever Committed by Anna Schumaker
Browse files

rpcrdma: Trace connection registration and unregistration



These new trace points record xarray indices and the time of
endpoint registration and unregistration, to co-ordinate with
device removal events.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 6b3b023e
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
@@ -2277,6 +2277,42 @@ DEFINE_CLIENT_DEVICE_EVENT(rpcrdma_client_remove_one);
DEFINE_CLIENT_DEVICE_EVENT(rpcrdma_client_wait_on);
DEFINE_CLIENT_DEVICE_EVENT(rpcrdma_client_remove_one_done);

DECLARE_EVENT_CLASS(rpcrdma_client_register_class,
	TP_PROTO(
		const struct ib_device *device,
		const struct rpcrdma_notification *rn
	),

	TP_ARGS(device, rn),

	TP_STRUCT__entry(
		__string(name, device->name)
		__field(void *, callback)
		__field(u32, index)
	),

	TP_fast_assign(
		__assign_str(name);
		__entry->callback = rn->rn_done;
		__entry->index = rn->rn_index;
	),

	TP_printk("device=%s index=%u done callback=%pS\n",
		__get_str(name), __entry->index, __entry->callback
	)
);

#define DEFINE_CLIENT_REGISTER_EVENT(name)				\
	DEFINE_EVENT(rpcrdma_client_register_class, name,		\
	TP_PROTO(							\
		const struct ib_device *device,				\
		const struct rpcrdma_notification *rn			\
	),								\
	TP_ARGS(device, rn))

DEFINE_CLIENT_REGISTER_EVENT(rpcrdma_client_register);
DEFINE_CLIENT_REGISTER_EVENT(rpcrdma_client_unregister);

#endif /* _TRACE_RPCRDMA_H */

#include <trace/define_trace.h>
+2 −0
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ int rpcrdma_rn_register(struct ib_device *device,
		return -ENOMEM;
	kref_get(&rd->rd_kref);
	rn->rn_done = done;
	trace_rpcrdma_client_register(device, rn);
	return 0;
}

@@ -91,6 +92,7 @@ void rpcrdma_rn_unregister(struct ib_device *device,
	if (!rd)
		return;

	trace_rpcrdma_client_unregister(device, rn);
	xa_erase(&rd->rd_xa, rn->rn_index);
	kref_put(&rd->rd_kref, rpcrdma_rn_release);
}