add ifdef __sun__ for Solaris specific code
[fio.git] / ioengines.c
index abbaa9a7bd46eb3478706183fad658607d3058d9..6e135af42c4e8ecccba555b18b7e1fbb13074ac2 100644 (file)
@@ -476,8 +476,19 @@ int td_io_open_file(struct thread_data *td, struct fio_file *f)
        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;
 
-               if (fcntl(f->fd, F_SET_RW_HINT, &hint) < 0) {
+               /*
+                * 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.
+                */
+               if (td->o.odirect)
+                       cmd = F_SET_FILE_RW_HINT;
+               else
+                       cmd = F_SET_RW_HINT;
+
+               if (fcntl(f->fd, cmd, &hint) < 0) {
                        td_verror(td, errno, "fcntl write hint");
                        goto err;
                }
@@ -494,12 +505,15 @@ int td_io_open_file(struct thread_data *td, struct fio_file *f)
 
                if (ret) {
                        td_verror(td, ret, "fio_set_odirect");
+#if defined(__sun__)
                        if (ret == ENOTTY) { /* ENOTTY suggests RAW device or ZFS */
                                log_err("fio: doing directIO to RAW devices or ZFS not supported\n");
                        } else {
                                log_err("fio: the file system does not seem to support direct IO\n");
                        }
-
+#else
+                       log_err("fio: the file system does not seem to support direct IO\n");
+#endif
                        goto err;
                }
        }