X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=filesetup.c;h=789f0ed29ea501be4c5e3c3ee895093b305b5787;hb=b47b45887dcd4c9bd7d0391a393809ef892a34ff;hp=38ad9edc6e206fd919309087bf4590dd76231ea1;hpb=1be7afd7329ebdca520d637f571d2b31c33f6ba1;p=fio.git diff --git a/filesetup.c b/filesetup.c index 38ad9edc..789f0ed2 100644 --- a/filesetup.c +++ b/filesetup.c @@ -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; @@ -100,7 +100,6 @@ static void fallocate_file(struct thread_data *td, struct fio_file *f) log_err("fio: unknown fallocate mode: %d\n", td->o.fallocate_mode); assert(0); } - } /* @@ -528,8 +527,6 @@ static int __file_invalidate_cache(struct thread_data *td, struct fio_file *f, } if (ret < 0) errval = errno; - else if (ret) /* probably not supported */ - errval = ret; } else if (f->filetype == FIO_TYPE_CHAR || f->filetype == FIO_TYPE_PIPE) { dprint(FD_IO, "invalidate not supported %s\n", f->file_name); @@ -1591,7 +1588,8 @@ int add_file(struct thread_data *td, const char *fname, int numjob, int inc) if (f->filetype == FIO_TYPE_FILE) td->nr_normal_files++; - set_already_allocated(file_name); + if (td->o.numjobs > 1) + set_already_allocated(file_name); if (inc) td->o.nr_files++; @@ -1846,3 +1844,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 +}