rxrpc: Add a tracepoint for aborts being proposed

Add a tracepoint to rxrpc to trace the proposal of an abort.  The abort is
performed asynchronously by the I/O thread.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
Link: https://patch.msgid.link/726356.1730898045@warthog.procyon.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
David Howells 2024-11-06 13:00:45 +00:00 committed by Jakub Kicinski
parent d9ccb18f83
commit 8b9a7bd4d6
2 changed files with 26 additions and 0 deletions

View File

@ -773,6 +773,31 @@ TRACE_EVENT(rxrpc_rx_done,
TP_printk("r=%d a=%d", __entry->result, __entry->abort_code) TP_printk("r=%d a=%d", __entry->result, __entry->abort_code)
); );
TRACE_EVENT(rxrpc_abort_call,
TP_PROTO(const struct rxrpc_call *call, int abort_code),
TP_ARGS(call, abort_code),
TP_STRUCT__entry(
__field(unsigned int, call_nr)
__field(enum rxrpc_abort_reason, why)
__field(int, abort_code)
__field(int, error)
),
TP_fast_assign(
__entry->call_nr = call->debug_id;
__entry->why = call->send_abort_why;
__entry->abort_code = abort_code;
__entry->error = call->send_abort_err;
),
TP_printk("c=%08x a=%d e=%d %s",
__entry->call_nr,
__entry->abort_code, __entry->error,
__print_symbolic(__entry->why, rxrpc_abort_reasons))
);
TRACE_EVENT(rxrpc_abort, TRACE_EVENT(rxrpc_abort,
TP_PROTO(unsigned int call_nr, enum rxrpc_abort_reason why, TP_PROTO(unsigned int call_nr, enum rxrpc_abort_reason why,
u32 cid, u32 call_id, rxrpc_seq_t seq, int abort_code, int error), u32 cid, u32 call_id, rxrpc_seq_t seq, int abort_code, int error),

View File

@ -29,6 +29,7 @@ bool rxrpc_propose_abort(struct rxrpc_call *call, s32 abort_code, int error,
call->send_abort_why = why; call->send_abort_why = why;
call->send_abort_err = error; call->send_abort_err = error;
call->send_abort_seq = 0; call->send_abort_seq = 0;
trace_rxrpc_abort_call(call, abort_code);
/* Request abort locklessly vs rxrpc_input_call_event(). */ /* Request abort locklessly vs rxrpc_input_call_event(). */
smp_store_release(&call->send_abort, abort_code); smp_store_release(&call->send_abort, abort_code);
rxrpc_poke_call(call, rxrpc_call_poke_abort); rxrpc_poke_call(call, rxrpc_call_poke_abort);