This commit / feature adds completion latency histogram output to fio, piggybacking
[fio.git] / backend.c
index d8f4f4cfb28e807ba98e2dc8735cc0609acd980e..c3ad8312de67f13d48e5e67ee9ae117945ba9a22 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -603,6 +603,15 @@ static void do_verify(struct thread_data *td, uint64_t verify_bytes)
        if (td->error)
                return;
 
+       /*
+        * verify_state needs to be reset before verification
+        * proceeds so that expected random seeds match actual
+        * random seeds in headers. The main loop will reset
+        * all random number generators if randrepeat is set.
+        */
+       if (!td->o.rand_repeatable)
+               td_fill_verify_state_seed(td);
+
        td_set_runstate(td, TD_VERIFYING);
 
        io_u = NULL;
@@ -643,7 +652,7 @@ static void do_verify(struct thread_data *td, uint64_t verify_bytes)
                                break;
 
                        while ((io_u = get_io_u(td)) != NULL) {
-                               if (IS_ERR(io_u)) {
+                               if (IS_ERR_OR_NULL(io_u)) {
                                        io_u = NULL;
                                        ret = FIO_Q_BUSY;
                                        goto reap;
@@ -1252,6 +1261,7 @@ static int init_io_u(struct thread_data *td)
 
 static int switch_ioscheduler(struct thread_data *td)
 {
+#ifdef FIO_HAVE_IOSCHED_SWITCH
        char tmp[256], tmp2[128];
        FILE *f;
        int ret;
@@ -1310,6 +1320,9 @@ static int switch_ioscheduler(struct thread_data *td)
 
        fclose(f);
        return 0;
+#else
+       return 0;
+#endif
 }
 
 static bool keep_running(struct thread_data *td)
@@ -1386,7 +1399,7 @@ static uint64_t do_dry_run(struct thread_data *td)
                        break;
 
                io_u = get_io_u(td);
-               if (!io_u)
+               if (IS_ERR_OR_NULL(io_u))
                        break;
 
                io_u_set(io_u, IO_U_F_FLIGHT);
@@ -2356,7 +2369,7 @@ int fio_backend(struct sk_out *sk_out)
                        for (i = 0; i < DDIR_RWDIR_CNT; i++) {
                                struct io_log *log = agg_io_log[i];
 
-                               flush_log(log, 0);
+                               flush_log(log, false);
                                free_log(log);
                        }
                }