add fio_set_directio() error message for platforms without direct I/O
[fio.git] / filesetup.c
index 362997c15856dbb83b2ab39a0a123e217dd65dd7..891a55a1ddb97ab30c7cc375cd9246fed21addd8 100644 (file)
@@ -67,7 +67,7 @@ static void fallocate_file(struct thread_data *td, struct fio_file *f)
        switch (td->o.fallocate_mode) {
        case FIO_FALLOCATE_NATIVE:
                r = native_fallocate(td, f);
-               if (r != 0)
+               if (r != 0 && errno != ENOSYS)
                        log_err("fio: native_fallocate call failed: %s\n",
                                        strerror(errno));
                break;
@@ -1843,3 +1843,32 @@ void filesetup_mem_free(void)
 {
        free_already_allocated();
 }
+
+/*
+ * This function is for platforms which support direct I/O but not O_DIRECT.
+ */
+int fio_set_directio(struct thread_data *td, struct fio_file *f)
+{
+#ifdef FIO_OS_DIRECTIO
+       int ret = fio_set_odirect(f);
+
+       if (ret) {
+               td_verror(td, ret, "fio_set_directio");
+#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
+               return -1;
+       }
+
+       return 0;
+#else
+       log_err("fio: direct IO is not supported on this host operating system\n");
+       return -1;
+#endif
+}