if (td->eo && td->io_ops->options) {
options_free(td->io_ops->options, td->eo);
free(td->eo);
- if (td->o.use_thread)
- td->eo = NULL;
+ td->eo = NULL;
}
if (td->io_ops->dlhandle) {
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 "
+ log_err("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",
+ log_err("fio: first I/O failed. If %s is a zoned block device, consider --zonemode=zbd\n",
io_u->file->file_name);
}
if (fio_option_is_set(&td->o, write_hint) &&
(f->filetype == FIO_TYPE_BLOCK || f->filetype == FIO_TYPE_FILE)) {
uint64_t hint = td->o.write_hint;
- int cmd;
+ int res;
/*
- * For direct IO, we just need/want to set the hint on
- * the file descriptor. For buffered IO, we need to set
- * it on the inode.
+ * For direct IO, set the hint on the file descriptor if that is
+ * supported. Otherwise set it on the inode. For buffered IO, we
+ * need to set it on the inode.
*/
- if (td->o.odirect)
- cmd = F_SET_FILE_RW_HINT;
- else
- cmd = F_SET_RW_HINT;
-
- if (fcntl(f->fd, cmd, &hint) < 0) {
+ if (td->o.odirect) {
+ res = fcntl(f->fd, F_SET_FILE_RW_HINT, &hint);
+ if (res < 0)
+ res = fcntl(f->fd, F_SET_RW_HINT, &hint);
+ } else {
+ res = fcntl(f->fd, F_SET_RW_HINT, &hint);
+ }
+ if (res < 0) {
td_verror(td, errno, "fcntl write hint");
goto err;
}