]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
rxrpc: Add a tracepoint for aborts being proposed
authorDavid Howells <dhowells@redhat.com>
Wed, 6 Nov 2024 13:00:45 +0000 (13:00 +0000)
committerJakub Kicinski <kuba@kernel.org>
Mon, 11 Nov 2024 23:27:46 +0000 (15:27 -0800)
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>
include/trace/events/rxrpc.h
net/rxrpc/sendmsg.c

index cc22596c7250cf62bfffacd5033be0073c62c602..d03e0bd8c028b56357220e8995a444bb66c584d0 100644 (file)
@@ -773,6 +773,31 @@ TRACE_EVENT(rxrpc_rx_done,
            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,
            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),
index 23d18fe5de9f0d356c936b4ed80b24c18ddfeeb9..6abb8eec1b2b12f849575e8fcb72d84c78b71e67 100644 (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_err = error;
                call->send_abort_seq = 0;
+               trace_rxrpc_abort_call(call, abort_code);
                /* Request abort locklessly vs rxrpc_input_call_event(). */
                smp_store_release(&call->send_abort, abort_code);
                rxrpc_poke_call(call, rxrpc_call_poke_abort);