Fix verify random bytes filling
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index 6e0dae24d5cf0e8410c0b04e2d25856b7839b8b2..792d44228c694fb95e49f347a8ecb1605cd10e97 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -724,6 +724,8 @@ static int keep_running(struct thread_data *td)
 {
        unsigned long long io_done;
 
+       if (td->done)
+               return 0;
        if (td->o.time_based)
                return 1;
        if (td->o.loops) {
@@ -909,8 +911,8 @@ static void *thread_main(void *data)
        }
 
        update_rusage_stat(td);
-       td->ts.runtime[0] = runtime[0] / 1000;
-       td->ts.runtime[1] = runtime[1] / 1000;
+       td->ts.runtime[0] = (runtime[0] + 999) / 1000;
+       td->ts.runtime[1] = (runtime[1] + 999) / 1000;
        td->ts.total_run_time = mtime_since_now(&td->epoch);
        td->ts.io_bytes[0] = td->io_bytes[0];
        td->ts.io_bytes[1] = td->io_bytes[1];
@@ -921,8 +923,6 @@ static void *thread_main(void *data)
                finish_log(td, td->ts.slat_log, "slat");
        if (td->ts.clat_log)
                finish_log(td, td->ts.clat_log, "clat");
-       if (td->o.write_iolog_file)
-               write_iolog_close(td);
        if (td->o.exec_postrun) {
                if (system(td->o.exec_postrun) < 0)
                        log_err("fio: postrun %s failed\n", td->o.exec_postrun);
@@ -937,6 +937,13 @@ err:
        close_files(td);
        close_ioengine(td);
        cleanup_io_u(td);
+
+       /*
+        * do this very late, it will log file closing as well
+        */
+       if (td->o.write_iolog_file)
+               write_iolog_close(td);
+
        options_mem_free(td);
        td_set_runstate(td, TD_EXITED);
        return (void *) (unsigned long) td->error;