The cpuio engine option exit_io_done= should be effective only if
there is at least one real I/O thread configured.
The existing fio_cpuio_queue() with exit_io_done= option enabled
lets cpuio threads exit even if cpuio threads are the only threads
configured.
Since this option is supposed to mean "exit when I/O threads are done",
cpuio threads exiting (but only after the first spin cycle is done)
when no threads have done any I/O is a bit confusing.
> [cpu] exit_on_io_done=bool Detect when IO threads are done, then exit.
Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
{
struct thread_data *td;
int i;
+ int nr_io_threads = 0;
for_each_td(td, i) {
if (td->flags & TD_F_NOIO)
continue;
+ nr_io_threads++;
if (td->runstate < TD_EXITED)
return 1;
}
+ if (!nr_io_threads)
+ return -1; /* we only had cpuio threads to begin with */
return 0;
}