The following changes since commit be23e6be4fadb723f925824f88fbaedbd3502251: Kill off old GUASI IO engine (2020-09-07 13:38:03 -0600) are available in the Git repository at: git://git.kernel.dk/fio.git master for you to fetch changes up to ca8ff0968cec7ee47ca7fe5b40f592c2b332b062: Merge branch 'zbd' of https://github.com/bvanassche/fio into master (2020-09-08 10:25:48 -0600) ---------------------------------------------------------------- Bart Van Assche (1): zbd: Add a missing pthread_mutex_unlock() call Jens Axboe (2): engines/io_uring: allow setting of IOSQE_ASYNC Merge branch 'zbd' of https://github.com/bvanassche/fio into master engines/io_uring.c | 16 ++++++++++++++++ zbd.c | 1 + 2 files changed, 17 insertions(+) --- Diff of recent changes: diff --git a/engines/io_uring.c b/engines/io_uring.c index ca5b90c9..e2b5e6ee 100644 --- a/engines/io_uring.c +++ b/engines/io_uring.c @@ -66,6 +66,7 @@ struct ioring_data { unsigned iodepth; bool ioprio_class_set; bool ioprio_set; + int prepped; struct ioring_mmap mmap[3]; }; @@ -82,6 +83,7 @@ struct ioring_options { unsigned int nonvectored; unsigned int uncached; unsigned int nowait; + unsigned int force_async; }; static const int ddir_to_op[2][2] = { @@ -197,6 +199,15 @@ static struct fio_option options[] = { .category = FIO_OPT_C_ENGINE, .group = FIO_OPT_G_IOURING, }, + { + .name = "force_async", + .lname = "Force async", + .type = FIO_OPT_INT, + .off1 = offsetof(struct ioring_options, force_async), + .help = "Set IOSQE_ASYNC every N requests", + .category = FIO_OPT_C_ENGINE, + .group = FIO_OPT_G_IOURING, + }, { .name = NULL, }, @@ -277,6 +288,11 @@ static int fio_ioring_prep(struct thread_data *td, struct io_u *io_u) } } + if (o->force_async && ++ld->prepped == o->force_async) { + ld->prepped = 0; + sqe->flags |= IOSQE_ASYNC; + } + sqe->user_data = (unsigned long) io_u; return 0; } diff --git a/zbd.c b/zbd.c index e8ecbb6f..905c0c2b 100644 --- a/zbd.c +++ b/zbd.c @@ -1546,6 +1546,7 @@ enum io_u_action zbd_adjust_block(struct thread_data *td, struct io_u *io_u) case DDIR_READ: if (td->runstate == TD_VERIFYING && td_write(td)) { zb = zbd_replay_write_order(td, io_u, zb); + pthread_mutex_unlock(&zb->mutex); goto accept; } /*