X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=blkparse_fmt.c;h=c42e6d7b7219d532c4ae34d937e0ea9660535426;hb=d025d6c67760a52e34e6c7352f33ad5dbbb4f6f4;hp=83a85049e8d9308918bb9104cd8b1ab927b4bcef;hpb=37081bf5636d1bef1dd141a03a64b3c516867ac9;p=blktrace.git diff --git a/blkparse_fmt.c b/blkparse_fmt.c index 83a8504..c42e6d7 100644 --- a/blkparse_fmt.c +++ b/blkparse_fmt.c @@ -54,12 +54,16 @@ static inline void fill_rwbs(char *rwbs, struct blk_io_trace *t) { int w = t->action & BLK_TC_ACT(BLK_TC_WRITE); int a = t->action & BLK_TC_ACT(BLK_TC_AHEAD); - int b = t->action & BLK_TC_ACT(BLK_TC_BARRIER); int s = t->action & BLK_TC_ACT(BLK_TC_SYNC); int m = t->action & BLK_TC_ACT(BLK_TC_META); int d = t->action & BLK_TC_ACT(BLK_TC_DISCARD); + int f = t->action & BLK_TC_ACT(BLK_TC_FLUSH); + int u = t->action & BLK_TC_ACT(BLK_TC_FUA); int i = 0; + if (f) + rwbs[i++] = 'F'; /* flush */ + if (d) rwbs[i++] = 'D'; else if (w) @@ -68,10 +72,11 @@ static inline void fill_rwbs(char *rwbs, struct blk_io_trace *t) rwbs[i++] = 'R'; else rwbs[i++] = 'N'; + + if (u) + rwbs[i++] = 'F'; /* fua */ if (a) rwbs[i++] = 'A'; - if (b) - rwbs[i++] = 'B'; if (s) rwbs[i++] = 'S'; if (m) @@ -152,11 +157,11 @@ static unsigned int get_pdu_int(struct blk_io_trace *t) static void get_pdu_remap(struct blk_io_trace *t, struct blk_io_trace_remap *r) { struct blk_io_trace_remap *__r = pdu_start(t); - __u64 sector = __r->sector; + __u64 sector_from = __r->sector_from; - r->device = be32_to_cpu(__r->device); r->device_from = be32_to_cpu(__r->device_from); - r->sector = be64_to_cpu(sector); + r->device_to = be32_to_cpu(__r->device_to); + r->sector_from = be64_to_cpu(sector_from); } static void print_field(char *act, struct per_cpu_info *pci, @@ -188,7 +193,7 @@ static void print_field(char *act, struct per_cpu_info *pci, break; } case 'd': { - char rwbs[6]; + char rwbs[8]; fill_rwbs(rwbs, t); fprintf(ofp, strcat(format, "s"), rwbs); @@ -284,20 +289,24 @@ static void process_default(char *act, struct per_cpu_info *pci, struct blk_io_trace *t, unsigned long long elapsed, int pdu_len, unsigned char *pdu_buf) { - struct blk_io_trace_remap r = { .device = 0, }; - char rwbs[6]; + struct blk_io_trace_remap r = { .device_from = 0, }; + char rwbs[8]; char *name; fill_rwbs(rwbs, t); + /* + * For remaps we have to modify the device using the remap structure + * passed up. + */ + if (act[0] == 'A') { + get_pdu_remap(t, &r); + t->device = r.device_to; + } + /* * The header is always the same */ - if (act[0] == 'A') { /* Remap */ - get_pdu_remap(t, &r); - t->device = r.device_from; - } - fprintf(ofp, "%3d,%-3d %2d %8d %5d.%09lu %5u %2s %3s ", MAJOR(t->device), MINOR(t->device), pci->cpu, t->sequence, (int) SECONDS(t->time), (unsigned long) NANO_SECONDS(t->time), @@ -388,10 +397,11 @@ static void process_default(char *act, struct per_cpu_info *pci, break; case 'A': /* remap */ + get_pdu_remap(t, &r); fprintf(ofp, "%llu + %u <- (%d,%d) %llu\n", (unsigned long long) t->sector, t_sec(t), - MAJOR(r.device), MINOR(r.device), - (unsigned long long) r.sector); + MAJOR(r.device_from), MINOR(r.device_from), + (unsigned long long) r.sector_from); break; case 'X': /* Split */ @@ -440,7 +450,7 @@ void process_fmt(char *act, struct per_cpu_info *pci, struct blk_io_trace *t, case 'r': fprintf(ofp, "\r"); break; case 't': fprintf(ofp, "\t"); break; default: - fprintf(stderr, + fprintf(stderr, "Invalid escape char in format %c\n", p[1]); exit(1);