time: ensure that offload mode switches parent out of ramp
authorJens Axboe <axboe@kernel.dk>
Wed, 13 Sep 2017 15:03:20 +0000 (09:03 -0600)
committerJens Axboe <axboe@kernel.dk>
Wed, 13 Sep 2017 15:03:20 +0000 (09:03 -0600)
If we have worker threads submitting IO for the jobs AND using
ramp time, then we need to ensure that the parent job is switched out of
ramp mode. This normally happens as part of IO submission, but since
we have worker threads doing that for us, it never happens for the
parent.

Fixes: https://github.com/axboe/fio/issues/459
Signed-off-by: Jens Axboe <axboe@kernel.dk>
time.c

diff --git a/time.c b/time.c
index 0798419..28c2071 100644 (file)
--- a/time.c
+++ b/time.c
@@ -97,16 +97,17 @@ bool in_ramp_time(struct thread_data *td)
        return td->o.ramp_time && !td->ramp_time_over;
 }
 
-static void parent_update_ramp(struct thread_data *td)
+static bool parent_update_ramp(struct thread_data *td)
 {
        struct thread_data *parent = td->parent;
 
        if (!parent || parent->ramp_time_over)
-               return;
+               return false;
 
        reset_all_stats(parent);
        parent->ramp_time_over = 1;
        td_set_runstate(parent, TD_RAMP);
+       return true;
 }
 
 bool ramp_time_over(struct thread_data *td)
@@ -118,7 +119,15 @@ bool ramp_time_over(struct thread_data *td)
                td->ramp_time_over = 1;
                reset_all_stats(td);
                td_set_runstate(td, TD_RAMP);
-               parent_update_ramp(td);
+
+               /*
+                * If we have a parent, the parent isn't doing IO. Hence
+                * the parent never enters do_io(), which will switch us
+                * from RAMP -> RUNNING. Do this manually here.
+                */
+               if (parent_update_ramp(td))
+                       td_set_runstate(td, TD_RUNNING);
+
                return true;
        }