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>
return td->o.ramp_time && !td->ramp_time_over;
}
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)
{
struct thread_data *parent = td->parent;
if (!parent || parent->ramp_time_over)
reset_all_stats(parent);
parent->ramp_time_over = 1;
td_set_runstate(parent, TD_RAMP);
reset_all_stats(parent);
parent->ramp_time_over = 1;
td_set_runstate(parent, TD_RAMP);
}
bool ramp_time_over(struct thread_data *td)
}
bool ramp_time_over(struct thread_data *td)
td->ramp_time_over = 1;
reset_all_stats(td);
td_set_runstate(td, TD_RAMP);
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);
+