Ignore exit_io_done= option if no I/O threads are configured
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Wed, 27 Jul 2016 13:37:13 +0000 (22:37 +0900)
committerJens Axboe <axboe@fb.com>
Wed, 27 Jul 2016 14:29:45 +0000 (08:29 -0600)
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>
libfio.c

index 55762d7be3cc99617c95e9981f9cc40413e3b4c0..25866758be9fac27001fdf9715e47f36fa6779dd 100644 (file)
--- a/libfio.c
+++ b/libfio.c
@@ -274,14 +274,18 @@ int fio_running_or_pending_io_threads(void)
 {
        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;
 }