summaryrefslogtreecommitdiff
path: root/blkparse.c
diff options
context:
space:
mode:
authorAlan D. Brunelle <alan.brunelle@hp.com>2008-05-27 08:19:57 -0400
committerAlan D. Brunelle <alan.brunelle@hp.com>2008-05-27 08:19:57 -0400
commit1a15f6a82d62babb9d2f04a7400ff316a666dd42 (patch)
treea86b8ba4795e7a2eab1b7cdc991ea16b3fc54877 /blkparse.c
parent5bebfd168c3f3f42acfd4a0263e9f4d1f5faea16 (diff)
downloadblktrace-1a15f6a82d62babb9d2f04a7400ff316a666dd42.tar.gz
blktrace-1a15f6a82d62babb9d2f04a7400ff316a666dd42.tar.bz2
Added in handling of MESSAGE notes
Sample output: 8,16 1 691118 17.417000000 0 C R 2660776 + 8 [0] 8,16 1 691119 17.417000000 0 D R 2660792 + 8 [swapper] 8,16 1 691120 17.417000000 4688 U N [dd] 42 8,16 1 0 17.418000000 0 m N elv switch: noop 8,16 1 691121 17.418000000 4638 C R 2660784 + 8 [0] 8,16 1 691122 17.418000000 4638 D R 2660800 + 8 [bash] 8,16 1 691123 17.418000000 4638 C R 2660792 + 8 [0] Thanks to Carl Henrik Lunde <chlunde@ping.uio.no> for adding in sequence printing & time-stamp correction.
Diffstat (limited to 'blkparse.c')
-rw-r--r--blkparse.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/blkparse.c b/blkparse.c
index 517dde5..3c31db6 100644
--- a/blkparse.c
+++ b/blkparse.c
@@ -590,6 +590,22 @@ static void handle_notify(struct blk_io_trace *bit)
break;
+ case BLK_TN_MESSAGE:
+ if (bit->pdu_len > 0) {
+ char msg[bit->pdu_len+1];
+
+ memcpy(msg, (char *)payload, bit->pdu_len);
+ msg[bit->pdu_len] = '\0';
+
+ fprintf(ofp,
+ "%3d,%-3d %2d %8s %5d.%09lu %5u %2s %3s %s\n",
+ MAJOR(bit->device), MINOR(bit->device),
+ bit->cpu, "0", (int) SECONDS(bit->time),
+ (unsigned long) NANO_SECONDS(bit->time),
+ 0, "m", "N", msg);
+ }
+ break;
+
default:
/* Ignore unknown notify events */
;
@@ -1577,7 +1593,9 @@ static void dump_trace(struct blk_io_trace *t, struct per_cpu_info *pci,
struct per_dev_info *pdi)
{
if (text_output) {
- if (t->action & BLK_TC_ACT(BLK_TC_PC))
+ if (t->action == BLK_TN_MESSAGE)
+ handle_notify(t);
+ else if (t->action & BLK_TC_ACT(BLK_TC_PC))
dump_trace_pc(t, pdi, pci);
else
dump_trace_fs(t, pdi, pci);
@@ -2176,7 +2194,7 @@ static int read_events(int fd, int always_block, int *fdblock)
/*
* not a real trace, so grab and handle it here
*/
- if (bit->action & BLK_TC_ACT(BLK_TC_NOTIFY)) {
+ if (bit->action & BLK_TC_ACT(BLK_TC_NOTIFY) && bit->action != BLK_TN_MESSAGE) {
handle_notify(bit);
output_binary(bit, sizeof(*bit) + bit->pdu_len);
continue;
@@ -2319,7 +2337,7 @@ static int ms_prime(struct ms_stream *msp)
if (verify_trace(bit))
goto err;
- if (bit->action & BLK_TC_ACT(BLK_TC_NOTIFY)) {
+ if (bit->action & BLK_TC_ACT(BLK_TC_NOTIFY) && bit->action != BLK_TN_MESSAGE) {
handle_notify(bit);
output_binary(bit, sizeof(*bit) + bit->pdu_len);
bit_free(bit);