Disable io_submit_mode=offload with async engines
[fio.git] / ioengines.c
index 1c5970a4b5a188e5f4aa5f924b483c976a04142f..32583d5a802f1d41a3d4dfa109d44dfbaea3f1b9 100644 (file)
@@ -22,7 +22,7 @@
 
 static FLIST_HEAD(engine_list);
 
-static bool check_engine_ops(struct ioengine_ops *ops)
+static bool check_engine_ops(struct thread_data *td, struct ioengine_ops *ops)
 {
        if (ops->version != FIO_IOOPS_VERSION) {
                log_err("bad ioops version %d (want %d)\n", ops->version,
@@ -41,6 +41,15 @@ static bool check_engine_ops(struct ioengine_ops *ops)
        if (ops->flags & FIO_SYNCIO)
                return false;
 
+       /*
+        * async engines aren't reliable with offload
+        */
+       if (td->o.io_submit_mode == IO_MODE_OFFLOAD) {
+               log_err("%s: can't be used with offloaded submit. Use a sync "
+                       "engine\n", ops->name);
+               return true;
+       }
+
        if (!ops->event || !ops->getevents) {
                log_err("%s: no event/getevents handler\n", ops->name);
                return true;
@@ -193,7 +202,7 @@ struct ioengine_ops *load_ioengine(struct thread_data *td)
        /*
         * Check that the required methods are there.
         */
-       if (check_engine_ops(ops))
+       if (check_engine_ops(td, ops))
                return NULL;
 
        return ops;
@@ -352,7 +361,7 @@ enum fio_q_status td_io_queue(struct thread_data *td, struct io_u *io_u)
        }
 
        ret = td->io_ops->queue(td, io_u);
-       zbd_queue_io_u(io_u, ret);
+       zbd_queue_io_u(td, io_u, ret);
 
        unlock_file(td, io_u->file);
 
@@ -394,7 +403,7 @@ enum fio_q_status td_io_queue(struct thread_data *td, struct io_u *io_u)
        if (!td->io_ops->commit) {
                io_u_mark_submit(td, 1);
                io_u_mark_complete(td, 1);
-               zbd_put_io_u(io_u);
+               zbd_put_io_u(td, io_u);
        }
 
        if (ret == FIO_Q_COMPLETED) {