X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=ioengines.c;h=8b71e13449638dfec259370a57b74d1f7f1258c2;hb=42634d2118b41f26151f5b708e83d40061570653;hp=1a0898de701e349acdd9f4a2c1337504374334ec;hpb=214ac7e009897f8f82ab9e21aff9bc86d33bb470;p=fio.git diff --git a/ioengines.c b/ioengines.c index 1a0898de..8b71e134 100644 --- a/ioengines.c +++ b/ioengines.c @@ -104,7 +104,9 @@ static struct ioengine_ops *dlopen_ioengine(struct thread_data *td, * Unlike the included modules, external engines should have a * non-static ioengine structure that we can reference. */ - ops = dlsym(dlhandle, "ioengine"); + ops = dlsym(dlhandle, engine_lib); + if (!ops) + ops = dlsym(dlhandle, "ioengine"); if (!ops) { td_vmsg(td, -1, dlerror(), "dlsym"); dlclose(dlhandle); @@ -208,6 +210,16 @@ int td_io_getevents(struct thread_data *td, unsigned int min, unsigned int max, { int r = 0; + /* + * For ioengine=rdma one side operation RDMA_WRITE or RDMA_READ, + * server side gets a message from the client + * side that the task is finished, and + * td->done is set to 1 after td_io_commit(). In this case, + * there is no need to reap complete event in server side. + */ + if (td->done) + return 0; + if (min > 0 && td->io_ops->commit) { r = td->io_ops->commit(td); if (r < 0) @@ -224,7 +236,7 @@ int td_io_getevents(struct thread_data *td, unsigned int min, unsigned int max, out: if (r >= 0) { /* - * Reflect that our submitted requests were retrieved with + * Reflect that our submitted requests were retrieved with * whatever OS async calls are in the underlying engine. */ td->io_u_in_flight -= r; @@ -283,7 +295,7 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) "support direct IO, or iomem_align= is bad.\n"); } - if (!td->io_ops->commit) { + if (!td->io_ops->commit || ddir_trim(io_u->ddir)) { io_u_mark_submit(td, 1); io_u_mark_complete(td, 1); } @@ -292,8 +304,7 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) if (ddir_rw(io_u->ddir)) { io_u_mark_depth(td, 1); td->ts.total_io_u[io_u->ddir]++; - } else if (io_u->ddir == DDIR_TRIM) - td->ts.total_io_u[2]++; + } } else if (ret == FIO_Q_QUEUED) { int r; @@ -350,14 +361,14 @@ int td_io_commit(struct thread_data *td) if (!td->cur_depth || !td->io_u_queued) return 0; - io_u_mark_depth(td, td->io_u_queued); + io_u_mark_depth(td, td->io_u_queued); if (td->io_ops->commit) { ret = td->io_ops->commit(td); if (ret) td_verror(td, -ret, "io commit"); } - + /* * Reflect that events were submitted as async IO requests. */ @@ -522,7 +533,7 @@ int do_io_u_trim(struct thread_data *td, struct io_u *io_u) ret = os_trim(f->fd, io_u->offset, io_u->xfer_buflen); if (!ret) - return io_u->xfer_buflen;; + return io_u->xfer_buflen; io_u->error = ret; return 0;