static FLIST_HEAD(engine_list);
-static int check_engine_ops(struct ioengine_ops *ops)
+static bool check_engine_ops(struct ioengine_ops *ops)
{
if (ops->version != FIO_IOOPS_VERSION) {
log_err("bad ioops version %d (want %d)\n", ops->version,
FIO_IOOPS_VERSION);
- return 1;
+ return true;
}
if (!ops->queue) {
log_err("%s: no queue handler\n", ops->name);
- return 1;
+ return true;
}
/*
* sync engines only need a ->queue()
*/
if (ops->flags & FIO_SYNCIO)
- return 0;
+ return false;
- if (!ops->event) {
- log_err("%s: no event handler\n", ops->name);
- return 1;
- }
- if (!ops->getevents) {
- log_err("%s: no getevents handler\n", ops->name);
- return 1;
- }
- if (!ops->queue) {
- log_err("%s: no queue handler\n", ops->name);
- return 1;
+ if (!ops->event || !ops->getevents) {
+ log_err("%s: no event/getevents handler\n", ops->name);
+ return true;
}
- return 0;
+ return false;
}
void unregister_ioengine(struct ioengine_ops *ops)
int td_io_queue(struct thread_data *td, struct io_u *io_u)
{
+ const enum fio_ddir ddir = acct_ddir(io_u);
+ unsigned long buflen = io_u->xfer_buflen;
int ret;
dprint_io_u(io_u, "queue");
fio_ro_check(td, io_u);
assert((io_u->flags & IO_U_F_FLIGHT) == 0);
- io_u->flags |= IO_U_F_FLIGHT;
+ io_u_set(io_u, IO_U_F_FLIGHT);
assert(fio_file_open(io_u->file));
sizeof(struct timeval));
}
- if (ddir_rw(acct_ddir(io_u))) {
- td->io_issues[acct_ddir(io_u)]++;
- td->io_issue_bytes[acct_ddir(io_u)] += io_u->xfer_buflen;
+ if (ddir_rw(ddir)) {
+ td->io_issues[ddir]++;
+ td->io_issue_bytes[ddir] += buflen;
+ td->rate_io_issue_bytes[ddir] += buflen;
}
ret = td->io_ops->queue(td, io_u);
unlock_file(td, io_u->file);
- if (ret == FIO_Q_BUSY && ddir_rw(acct_ddir(io_u))) {
- td->io_issues[acct_ddir(io_u)]--;
- td->io_issue_bytes[acct_ddir(io_u)] -= io_u->xfer_buflen;
+ if (ret == FIO_Q_BUSY && ddir_rw(ddir)) {
+ td->io_issues[ddir]--;
+ td->io_issue_bytes[ddir] -= buflen;
+ td->rate_io_issue_bytes[ddir] -= buflen;
}
/*
td->o.odirect) {
log_info("fio: first direct IO errored. File system may not "
- "support direct IO, or iomem_align= is bad.\n");
+ "support direct IO, or iomem_align= is bad. Try "
+ "setting direct=0.\n");
}
if (!td->io_ops->commit || io_u->ddir == DDIR_TRIM) {
} else if (ret == FIO_Q_QUEUED) {
int r;
- if (ddir_rw(io_u->ddir)) {
- td->io_u_queued++;
+ td->io_u_queued++;
+
+ if (ddir_rw(io_u->ddir))
td->ts.total_io_u[io_u->ddir]++;
- }
if (td->io_u_queued >= td->o.iodepth_batch) {
r = td_io_commit(td);