X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=ioengines.c;h=9c5ac603d3291c04c7d754fdc8ddea56389b0d5d;hp=00098d6739daf8da3183476e98927395cba20e8c;hb=54e62ad43c0432a610b102eb82842176b482d18c;hpb=cd8a19e614013dbdbc9ad3c7fe5c9d861a6a6834 diff --git a/ioengines.c b/ioengines.c index 00098d67..9c5ac603 100644 --- a/ioengines.c +++ b/ioengines.c @@ -264,13 +264,15 @@ out: 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)); @@ -294,18 +296,20 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) 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; } /* @@ -325,7 +329,8 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) 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) { @@ -468,6 +473,17 @@ int td_io_open_file(struct thread_data *td, struct fio_file *f) goto err; } } +#ifdef FIO_HAVE_STREAMID + if (td->o.fadvise_stream && + (f->filetype == FIO_TYPE_BD || f->filetype == FIO_TYPE_FILE)) { + off_t stream = td->o.fadvise_stream; + + if (posix_fadvise(f->fd, stream, f->io_size, POSIX_FADV_STREAMID) < 0) { + td_verror(td, errno, "fadvise streamid"); + goto err; + } + } +#endif #ifdef FIO_OS_DIRECTIO /*