X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;ds=sidebyside;f=ioengines.c;h=8073d1b74dc8ca0a815b1dc4577953b39a804506;hb=6d459ee7e90393af490a64709aec206d8a585ebd;hp=1a7a6301d0b6b4d42112e62b8c520813a3c4530b;hpb=d5707a3565e958af566247e2c0acf09e031d8921;p=fio.git diff --git a/ioengines.c b/ioengines.c index 1a7a6301..8073d1b7 100644 --- a/ioengines.c +++ b/ioengines.c @@ -195,9 +195,13 @@ int td_io_getevents(struct thread_data *td, unsigned int min, unsigned int max, if (r < 0) goto out; } + if (max > td->cur_depth) + max = td->cur_depth; + if (min > max) + max = min; r = 0; - if (td->io_ops->getevents) + if (max && td->io_ops->getevents) r = td->io_ops->getevents(td, min, max, t); out: if (r >= 0) @@ -222,16 +226,15 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) io_u->resid = 0; if (td->io_ops->flags & FIO_SYNCIO) { - fio_gettime(&io_u->issue_time, NULL); - memcpy(&td->last_issue, &io_u->issue_time, - sizeof(struct timeval)); + if (fio_fill_issue_time(td)) + fio_gettime(&io_u->issue_time, NULL); /* - * for a sync engine, set the timeout upfront + * only used for iolog */ - if (mtime_since(&td->timeout_end, &io_u->issue_time) - < IO_U_TIMEOUT) - io_u_set_timeout(td); + if (td->o.read_iolog_file) + memcpy(&td->last_issue, &io_u->issue_time, + sizeof(struct timeval)); } if (io_u->ddir != DDIR_SYNC) @@ -267,18 +270,15 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u) } if ((td->io_ops->flags & FIO_SYNCIO) == 0) { - fio_gettime(&io_u->issue_time, NULL); - memcpy(&td->last_issue, &io_u->issue_time, - sizeof(struct timeval)); + if (fio_fill_issue_time(td)) + fio_gettime(&io_u->issue_time, NULL); /* - * async engine, set the timeout here + * only used for iolog */ - if (ret == FIO_Q_QUEUED && - (mtime_since(&td->timeout_end, &io_u->issue_time) - < IO_U_TIMEOUT)) { - io_u_set_timeout(td); - } + if (td->o.read_iolog_file) + memcpy(&td->last_issue, &io_u->issue_time, + sizeof(struct timeval)); } return ret; @@ -367,6 +367,21 @@ int td_io_open_file(struct thread_data *td, struct fio_file *f) if (f->file_map) memset(f->file_map, 0, f->num_maps * sizeof(int)); +#ifdef FIO_OS_DIRECTIO + /* + * Some OS's have a distinct call to mark the file non-buffered, + * instead of using O_DIRECT (Solaris) + */ + if (td->o.odirect) { + int ret = fio_set_odirect(f->fd); + + if (ret) { + td_verror(td, ret, "fio_set_odirect"); + goto err; + } + } +#endif + done: log_file(td, f, FIO_LOG_OPEN_FILE); return 0;