X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=ioengines.c;h=7df0abac0bf9a427fbb8273ddf6f151797c8fead;hp=f8c52e572dc59172303a28b0008e7d95e0a318d4;hb=d708ac5e21c97a92c9c7b6b7593d9f2b0d7c9d3f;hpb=7c639b1495d2776afbf66f91accff1e6000aa8f0 diff --git a/ioengines.c b/ioengines.c index f8c52e57..7df0abac 100644 --- a/ioengines.c +++ b/ioengines.c @@ -241,7 +241,7 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) sizeof(struct timeval)); } - if (!ddir_sync(io_u->ddir)) + if (ddir_rw(io_u->ddir)) td->io_issues[io_u->ddir]++; ret = td->io_ops->queue(td, io_u); @@ -254,7 +254,7 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) * IO, then it's likely an alignment problem or because the host fs * does not support O_DIRECT */ - if (io_u->error == EINVAL && td->io_issues[io_u->ddir] == 1 && + if (io_u->error == EINVAL && td->io_issues[io_u->ddir & 1] == 1 && td->o.odirect) { log_info("fio: first direct IO errored. File system may not " "support direct IO, or iomem_align= is bad.\n"); @@ -266,14 +266,15 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) } if (ret == FIO_Q_COMPLETED) { - if (!ddir_sync(io_u->ddir)) { + 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; - if (!ddir_sync(io_u->ddir)) { + if (ddir_rw(io_u->ddir)) { td->io_u_queued++; td->ts.total_io_u[io_u->ddir]++; } @@ -478,3 +479,21 @@ int do_io_u_sync(struct thread_data *td, struct io_u *io_u) return ret; } + +int do_io_u_trim(struct thread_data *td, struct io_u *io_u) +{ +#ifndef FIO_HAVE_TRIM + io_u->error = EINVAL; + return 0; +#else + struct fio_file *f = io_u->file; + int ret; + + ret = os_trim(f->fd, io_u->offset + f->file_offset, io_u->xfer_buflen); + if (!ret) + return io_u->xfer_buflen;; + + io_u->error = ret; + return 0; +#endif +}