+ /*
+ * 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] == 1 &&
+ td->o.odirect) {
+
+ log_info("fio: first direct IO errored. File system may not "
+ "support direct IO, or iomem_align= is bad, or "
+ "invalid block size. Try setting direct=0.\n");
+ }
+
+ if (zbd_unaligned_write(io_u->error) &&
+ td->io_issues[io_u->ddir & 1] == 1 &&
+ td->o.zone_mode != ZONE_MODE_ZBD) {
+ log_info("fio: first I/O failed. If %s is a zoned block device, consider --zonemode=zbd\n",
+ io_u->file->file_name);
+ }
+
+ if (!td->io_ops->commit) {
+ io_u_mark_submit(td, 1);
+ io_u_mark_complete(td, 1);
+ zbd_put_io_u(io_u);
+ }
+
+ if (ret == FIO_Q_COMPLETED) {
+ if (ddir_rw(io_u->ddir) ||
+ (ddir_sync(io_u->ddir) && td->runstate != TD_FSYNCING)) {
+ io_u_mark_depth(td, 1);
+ td->ts.total_io_u[io_u->ddir]++;