backend: terminate loop if we didn't do IO
authorJens Axboe <axboe@fb.com>
Wed, 9 Dec 2015 15:28:00 +0000 (08:28 -0700)
committerJens Axboe <axboe@fb.com>
Wed, 9 Dec 2015 15:28:00 +0000 (08:28 -0700)
The below commit modified how we clear stats, and that can sometimes
cause fio to hang around when ramp + runtime has been exceeded. The
below job file showed the issue:

[test-job]
bs=4k
rw=read
direct=1
runtime=6s
ramp_time=5s
ioengine=null
iodepth=32
size=100g

Where it would do the ramp time, then count down the 6s of runtime, then
fio would just sit there busy looping.

Fixes: ac28d9053679 ("Fixup bw/iops logging for short runs")
Signed-off-by: Jens Axboe <axboe@fb.com>
backend.c

index ae2612036124b700c7959251090389fd84d618ed..425b0ee94c370ab373cc245361cf60a635b0b2f1 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -1587,8 +1587,11 @@ static void *thread_main(void *data)
 
                if (td->o.verify_only && (td_write(td) || td_rw(td)))
                        verify_bytes = do_dry_run(td);
 
                if (td->o.verify_only && (td_write(td) || td_rw(td)))
                        verify_bytes = do_dry_run(td);
-               else
+               else {
                        verify_bytes = do_io(td);
                        verify_bytes = do_io(td);
+                       if (!verify_bytes)
+                               fio_mark_td_terminate(td);
+               }
 
                clear_state = 1;
 
 
                clear_state = 1;