]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
afs: Add a tracepoint for afs_read_receive()
authorDavid Howells <dhowells@redhat.com>
Mon, 16 Dec 2024 20:41:21 +0000 (20:41 +0000)
committerChristian Brauner <brauner@kernel.org>
Fri, 20 Dec 2024 21:34:09 +0000 (22:34 +0100)
Add a tracepoint for afs_read_receive() to allow potential missed wakeups
to be debugged.

Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://lore.kernel.org/r/20241216204124.3752367-32-dhowells@redhat.com
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/afs/file.c
include/trace/events/afs.h

index c296efebb4912f3ee7638fb392bfb00aec7aacb7..fc15497608c6145877dbb933cd41b27de7e0509f 100644 (file)
@@ -274,6 +274,7 @@ static void afs_read_receive(struct afs_call *call)
        state = READ_ONCE(call->state);
        if (state == AFS_CALL_COMPLETE)
                return;
+       trace_afs_read_recv(op, call);
 
        while (state < AFS_CALL_COMPLETE && READ_ONCE(call->need_attention)) {
                WRITE_ONCE(call->need_attention, false);
index c52fd83ca9b7ccf8e9b5c0b1d00133677d58c8ef..2e92487f3f347f2012fc7dc96af19121e0dea3e7 100644 (file)
@@ -1775,6 +1775,36 @@ TRACE_EVENT(afs_make_call,
                      __entry->fid.unique)
            );
 
+TRACE_EVENT(afs_read_recv,
+           TP_PROTO(const struct afs_operation *op, const struct afs_call *call),
+
+           TP_ARGS(op, call),
+
+           TP_STRUCT__entry(
+                   __field(unsigned int,               rreq)
+                   __field(unsigned int,               sreq)
+                   __field(unsigned int,               op)
+                   __field(unsigned int,               op_flags)
+                   __field(unsigned int,               call)
+                   __field(enum afs_call_state,        call_state)
+                            ),
+
+           TP_fast_assign(
+                   __entry->op = op->debug_id;
+                   __entry->sreq = op->fetch.subreq->debug_index;
+                   __entry->rreq = op->fetch.subreq->rreq->debug_id;
+                   __entry->op_flags = op->flags;
+                   __entry->call = call->debug_id;
+                   __entry->call_state = call->state;
+                          ),
+
+           TP_printk("R=%08x[%x] OP=%08x c=%08x cs=%x of=%x",
+                     __entry->rreq, __entry->sreq,
+                     __entry->op,
+                     __entry->call, __entry->call_state,
+                     __entry->op_flags)
+           );
+
 #endif /* _TRACE_AFS_H */
 
 /* This part must be outside protection */