summaryrefslogtreecommitdiff
path: root/blkparse_fmt.c
diff options
context:
space:
mode:
authorNamhyung Kim <namhyung@gmail.com>2011-08-11 12:48:07 +0200
committerJens Axboe <jaxboe@fusionio.com>2011-08-11 12:48:07 +0200
commit344320932064efa7105314d2437027b0733f4631 (patch)
treea22c553bb493773c894c1b7bb5c365894b06f73e /blkparse_fmt.c
parentbc5f9ff87cb38ffa3b64ba607e535043eef06d14 (diff)
downloadblktrace-344320932064efa7105314d2437027b0733f4631.tar.gz
blktrace-344320932064efa7105314d2437027b0733f4631.tar.bz2
Add FLUSH/FUA support
Add FLUSH/FUA support to blktrace. As FLUSH precedes WRITE and/or FUA follows WRITE, use the same 'F' flag for both cases and distinguish them by their (relative) position. The end results look like (other flags might be shown also): - WRITE: W - WRITE_FLUSH: FW - WRITE_FUA: WF - WRITE_FLUSH_FUA: FWF Note that we reuse TC_BARRIER due to lack of bit space of act_mask. Signed-off-by: Namhyung Kim <namhyung@gmail.com> Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'blkparse_fmt.c')
-rw-r--r--blkparse_fmt.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/blkparse_fmt.c b/blkparse_fmt.c
index ed6cd5c..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)
@@ -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);
@@ -285,7 +290,7 @@ static void process_default(char *act, struct per_cpu_info *pci,
int pdu_len, unsigned char *pdu_buf)
{
struct blk_io_trace_remap r = { .device_from = 0, };
- char rwbs[6];
+ char rwbs[8];
char *name;
fill_rwbs(rwbs, t);
@@ -445,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);