sizeof(struct timeval));
}
- if (io_u->ddir != DDIR_SYNC)
+ if (!ddir_sync(io_u->ddir))
td->io_issues[io_u->ddir]++;
ret = td->io_ops->queue(td, io_u);
unlock_file(td, io_u->file);
+ /*
+ * Add warning for O_DIRECT so that users have an easier time
+ * spotting potentially bad alignment. If this triggers for the first
+ * 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 &&
+ td->o.odirect) {
+ log_info("fio: first direct IO errored. File system may not "
+ "support direct IO, or iomem_align= is bad.\n");
+ }
+
if (!td->io_ops->commit) {
io_u_mark_submit(td, 1);
io_u_mark_complete(td, 1);
}
if (ret == FIO_Q_COMPLETED) {
- if (io_u->ddir != DDIR_SYNC) {
+ if (!ddir_sync(io_u->ddir)) {
io_u_mark_depth(td, 1);
td->ts.total_io_u[io_u->ddir]++;
}
} else if (ret == FIO_Q_QUEUED) {
int r;
- if (io_u->ddir != DDIR_SYNC) {
+ if (!ddir_sync(io_u->ddir)) {
td->io_u_queued++;
td->ts.total_io_u[io_u->ddir]++;
}
int td_io_close_file(struct thread_data *td, struct fio_file *f)
{
- assert(f->references);
-
if (!fio_file_closing(f))
log_file(td, f, FIO_LOG_CLOSE_FILE);