Just like blktrace distinguishes explicit and schedule by means of
BLK_TA_UNPLUG_IO and BLK_TA_UNPLUG_TIMER, actually make use of the
existing argument "explicit" to distinguish the two cases in the one
common tracepoint block_unplug.

Complements v2.6.39 commit 49cac01e1fa7 ("block: make unplug timer trace
event correspond to the schedule() unplug") and commit d9c978331790
("block: remove block_unplug_timer() trace point").

Signed-off-by: Steffen Maier <ma...@linux.ibm.com>
---

Changes since v1:
Use 0 and 1 instead of false and true for __print_symbolic table.
Now "trace-cmd report" can decode it. [Steven Rostedt]

 include/trace/events/block.h | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/include/trace/events/block.h b/include/trace/events/block.h
index 81b43f5bdf23..e90bb6eb8097 100644
--- a/include/trace/events/block.h
+++ b/include/trace/events/block.h
@@ -470,6 +470,11 @@ TRACE_EVENT(block_plug,
        TP_printk("[%s]", __entry->comm)
 );
 
+#define show_block_unplug_explicit(val)                \
+       __print_symbolic(val,                   \
+                        {0, "schedule"},       \
+                        {1, "explicit"})
+
 DECLARE_EVENT_CLASS(block_unplug,
 
        TP_PROTO(struct request_queue *q, unsigned int depth, bool explicit),
@@ -478,15 +483,18 @@ DECLARE_EVENT_CLASS(block_unplug,
 
        TP_STRUCT__entry(
                __field( int,           nr_rq                   )
+               __field( bool,          explicit                )
                __array( char,          comm,   TASK_COMM_LEN   )
        ),
 
        TP_fast_assign(
                __entry->nr_rq = depth;
+               __entry->explicit = explicit;
                memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
        ),
 
-       TP_printk("[%s] %d", __entry->comm, __entry->nr_rq)
+       TP_printk("[%s] %d %s", __entry->comm, __entry->nr_rq,
+                 show_block_unplug_explicit(__entry->explicit))
 );
 
 /**
-- 
2.13.5

Reply via email to