backend: ensure that fio_io_sync() commits IN on queued status
authorJens Axboe <axboe@fb.com>
Thu, 25 Feb 2016 16:04:06 +0000 (09:04 -0700)
committerJens Axboe <axboe@fb.com>
Thu, 25 Feb 2016 16:04:06 +0000 (09:04 -0700)
If we get a FIO_Q_QUEUED back, we need to commit pending IO
before we wait for it. Otherwise we trigger this bug:

fio: ioengines.c:257: td_io_getevents: Assertion `td->io_u_in_flight >= r' failed.

Reported-by: Andrey Kuzmin <andrey.v.kuzmin@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
backend.c

index fd8184917325af84ac74b50a8967c1ba507a026f..6083a51e7e5478557b1f7c4f79fb84363cde1bbc 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -309,6 +309,8 @@ requeue:
                put_io_u(td, io_u);
                return true;
        } else if (ret == FIO_Q_QUEUED) {
                put_io_u(td, io_u);
                return true;
        } else if (ret == FIO_Q_QUEUED) {
+               if (td_io_commit(td))
+                       return true;
                if (io_u_queued_complete(td, 1) < 0)
                        return true;
        } else if (ret == FIO_Q_COMPLETED) {
                if (io_u_queued_complete(td, 1) < 0)
                        return true;
        } else if (ret == FIO_Q_COMPLETED) {