X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=filesetup.c;h=891a55a1ddb97ab30c7cc375cd9246fed21addd8;hp=0e5599ab16502e9541023af6028e9814f366a844;hb=f7c9bfd57232c6e11623d741be340d32f796c726;hpb=6e344dc3445bfec0583072e82bea728ab8d54d58 diff --git a/filesetup.c b/filesetup.c index 0e5599ab..891a55a1 100644 --- a/filesetup.c +++ b/filesetup.c @@ -146,8 +146,6 @@ static int extend_file(struct thread_data *td, struct fio_file *f) flags |= O_CREAT; if (new_layout) flags |= O_TRUNC; - if (td->o.odirect) - flags |= OS_O_DIRECT; #ifdef WIN32 flags |= _O_BINARY; @@ -1845,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 +}