blktrace fixup + documentation
[fio.git] / blktrace.c
index 3f0938f22fa00f696b0963937e3ffd1ec74e25f3..1669fe556bc3324d2b40567e0afdab0f0e359667 100644 (file)
@@ -64,7 +64,10 @@ static void store_ipo(struct thread_data *td, unsigned long long offset,
 
        memset(ipo, 0, sizeof(*ipo));
        INIT_LIST_HEAD(&ipo->list);
-       ipo->offset = offset;
+       /*
+        * the 512 is wrong here, it should be the hardware sector size...
+        */
+       ipo->offset = offset * 512;
        ipo->len = bytes;
        ipo->delay = ttime / 1000;
        if (rw)
@@ -86,9 +89,18 @@ static void handle_trace(struct thread_data *td, struct blk_io_trace *t,
 
        if ((t->action & 0xffff) != __BLK_TA_QUEUE)
                return;
+       if (t->action & BLK_TC_ACT(BLK_TC_PC))
+               return;
+
+       /*
+        * should not happen, need to look into that...
+        */
+       if (!t->bytes)
+               return;
 
        rw = (t->action & BLK_TC_ACT(BLK_TC_WRITE)) != 0;
        ios[rw]++;
+       td->o.size += t->bytes;
        store_ipo(td, t->sector, t->bytes, rw, ttime);
 }
 
@@ -109,6 +121,8 @@ int load_blktrace(struct thread_data *td, const char *filename)
                return 1;
        }
 
+       td->o.size = 0;
+
        ios[0] = ios[1] = 0;
        ttime = 0;
        do {