Fix blktrace replay
[fio.git] / blktrace.c
index 4d64b9f5f1f5cbbca263faa7107850999b50e8d9..68ba964a3a363c6f5e85ac19e5410134e1943238 100644 (file)
@@ -6,11 +6,11 @@
 #include <sys/stat.h>
 #include <dirent.h>
 
-#include "list.h"
+#include "flist.h"
 #include "fio.h"
 #include "blktrace_api.h"
 
-#define TRACE_FIFO_SIZE        65536
+#define TRACE_FIFO_SIZE        8192
 
 /*
  * fifo refill frontend, to avoid reading data in trace sized bites
@@ -157,7 +157,7 @@ static void trace_add_open_event(struct thread_data *td, int fileno)
        ipo->ddir = DDIR_INVAL;
        ipo->fileno = fileno;
        ipo->file_action = FIO_LOG_OPEN_FILE;
-       list_add_tail(&ipo->list, &td->io_log_list);
+       flist_add_tail(&ipo->list, &td->io_log_list);
 }
 
 static void trace_add_file(struct thread_data *td, __u32 device)
@@ -187,7 +187,7 @@ static void trace_add_file(struct thread_data *td, __u32 device)
                int fileno;
 
                dprint(FD_BLKTRACE, "add devices %s\n", dev);
-               fileno = add_file(td, dev);
+               fileno = add_file_exclusive(td, dev);
                trace_add_open_event(td, fileno);
        }
 }
@@ -201,7 +201,7 @@ static void store_ipo(struct thread_data *td, unsigned long long offset,
        struct io_piece *ipo = malloc(sizeof(*ipo));
 
        memset(ipo, 0, sizeof(*ipo));
-       INIT_LIST_HEAD(&ipo->list);
+       INIT_FLIST_HEAD(&ipo->list);
        /*
         * the 512 is wrong here, it should be the hardware sector size...
         */
@@ -219,7 +219,7 @@ static void store_ipo(struct thread_data *td, unsigned long long offset,
        queue_io_piece(td, ipo);
 }
 
-static void handle_trace_notify(struct thread_data *td, struct blk_io_trace *t)
+static void handle_trace_notify(struct blk_io_trace *t)
 {
        switch (t->action) {
        case BLK_TN_PROCESS:
@@ -266,7 +266,7 @@ static void handle_trace(struct thread_data *td, struct blk_io_trace *t,
                return;
 
        if (t->action & BLK_TC_ACT(BLK_TC_NOTIFY))
-               handle_trace_notify(td, t);
+               handle_trace_notify(t);
        else
                handle_trace_fs(td, t, ttime, ios, bs);
 }
@@ -346,8 +346,10 @@ int load_blktrace(struct thread_data *td, const char *filename)
 
                        ttime = t.time;
                        cpu = t.cpu;
-               } else
+               } else {
+                       delay = 0;
                        handle_trace(td, &t, delay, ios, rw_bs);
+               }
        } while (1);
 
        fifo_free(fifo);