[PATCH] Reversed order of thinktime_blocks modulo operation
[fio.git] / fio.c
diff --git a/fio.c b/fio.c
index f046b0cd61e88d0571cedd63f03c681f16024083..dd52626469a0358cdbacc062d02058b19f148825 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -379,7 +379,6 @@ static void do_io(struct thread_data *td)
        td_set_runstate(td, TD_RUNNING);
 
        while (td->this_io_bytes[td->ddir] < td->io_size) {
-               struct timespec ts = { .tv_sec = 0, .tv_nsec = 0};
                struct timespec *timeout;
                int min_evts = 0;
                struct io_u *io_u;
@@ -407,6 +406,8 @@ static void do_io(struct thread_data *td)
                add_slat_sample(td, io_u->ddir, mtime_since(&io_u->start_time, &io_u->issue_time));
 
                if (td->cur_depth < td->iodepth) {
+                       struct timespec ts = { .tv_sec = 0, .tv_nsec = 0};
+
                        timeout = &ts;
                        min_evts = 0;
                } else {
@@ -447,8 +448,13 @@ static void do_io(struct thread_data *td)
                if (runtime_exceeded(td, &icd.time))
                        break;
 
-               if (td->thinktime)
-                       usec_sleep(td, td->thinktime);
+               if (td->thinktime) {
+                       unsigned long long b;
+
+                       b = td->io_blocks[0] + td->io_blocks[1];
+                       if (!(b % td->thinktime_blocks))
+                               usec_sleep(td, td->thinktime);
+               }
        }
 
        if (!td->error) {