X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=ioengines.c;h=b9200ba9223488923ed2cc879d58971c31c70dab;hb=700ad386aa886fe4b38432f25aa8ee318031d95a;hp=56723addc5af2f57348d2b3784c4594a5c8e88b1;hpb=1368d95b060802f3032bb662144faa99bd521b56;p=fio.git diff --git a/ioengines.c b/ioengines.c index 56723add..b9200ba9 100644 --- a/ioengines.c +++ b/ioengines.c @@ -121,19 +121,15 @@ static struct ioengine_ops *dlopen_ioengine(struct thread_data *td, return ops; } -static struct ioengine_ops *__load_ioengine(const char *name) +static struct ioengine_ops *__load_ioengine(const char *engine) { - char engine[64]; - - engine[sizeof(engine) - 1] = '\0'; - strncpy(engine, name, sizeof(engine) - 1); - /* * linux libaio has alias names, so convert to what we want */ - if (!strncmp(engine, "linuxaio", 8) || !strncmp(engine, "aio", 3)) { - dprint(FD_IO, "converting ioengine name: %s -> libaio\n", name); - strcpy(engine, "libaio"); + if (!strncmp(engine, "linuxaio", 8)) { + dprint(FD_IO, "converting ioengine name: %s -> libaio\n", + engine); + engine = "libaio"; } dprint(FD_IO, "load ioengine %s\n", engine); @@ -288,6 +284,13 @@ enum fio_q_status td_io_queue(struct thread_data *td, struct io_u *io_u) assert((io_u->flags & IO_U_F_FLIGHT) == 0); io_u_set(td, io_u, IO_U_F_FLIGHT); + + /* + * If overlap checking was enabled in offload mode we + * can release this lock that was acquired when we + * started the overlap check because the IO_U_F_FLIGHT + * flag is now set + */ if (td_offload_overlap(td)) pthread_mutex_unlock(&overlap_check); @@ -301,7 +304,9 @@ enum fio_q_status td_io_queue(struct thread_data *td, struct io_u *io_u) io_u->error = 0; io_u->resid = 0; - if (td_ioengine_flagged(td, FIO_SYNCIO)) { + if (td_ioengine_flagged(td, FIO_SYNCIO) || + (td_ioengine_flagged(td, FIO_ASYNCIO_SYNC_TRIM) && + io_u->ddir == DDIR_TRIM)) { if (fio_fill_issue_time(td)) fio_gettime(&io_u->issue_time, NULL); @@ -322,10 +327,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); - if (ret != FIO_Q_BUSY && io_u->post_submit) { - io_u->post_submit(io_u, io_u->error == 0); - io_u->post_submit = NULL; - } + zbd_queue_io_u(io_u, ret); unlock_file(td, io_u->file); @@ -367,24 +369,29 @@ 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); } if (ret == FIO_Q_COMPLETED) { - if (ddir_rw(io_u->ddir) || ddir_sync(io_u->ddir)) { + if (ddir_rw(io_u->ddir) || + (ddir_sync(io_u->ddir) && td->runstate != TD_FSYNCING)) { io_u_mark_depth(td, 1); td->ts.total_io_u[io_u->ddir]++; } } else if (ret == FIO_Q_QUEUED) { td->io_u_queued++; - if (ddir_rw(io_u->ddir) || ddir_sync(io_u->ddir)) + if (ddir_rw(io_u->ddir) || + (ddir_sync(io_u->ddir) && td->runstate != TD_FSYNCING)) td->ts.total_io_u[io_u->ddir]++; if (td->io_u_queued >= td->o.iodepth_batch) td_io_commit(td); } - if (!td_ioengine_flagged(td, FIO_SYNCIO)) { + if (!td_ioengine_flagged(td, FIO_SYNCIO) && + (!td_ioengine_flagged(td, FIO_ASYNCIO_SYNC_TRIM) || + io_u->ddir != DDIR_TRIM)) { if (fio_fill_issue_time(td)) fio_gettime(&io_u->issue_time, NULL);