diff options
-rw-r--r-- | source4/build/m4/rewrite.m4 | 12 | ||||
-rw-r--r-- | source4/client/cifsddio.c | 7 |
2 files changed, 18 insertions, 1 deletions
diff --git a/source4/build/m4/rewrite.m4 b/source4/build/m4/rewrite.m4 index f0279c69d0..cd39371354 100644 --- a/source4/build/m4/rewrite.m4 +++ b/source4/build/m4/rewrite.m4 @@ -496,6 +496,18 @@ fi ;; esac +AC_CACHE_CHECK([for O_DIRECT flag to open(2)],samba_cv_HAVE_OPEN_O_DIRECT,[ +AC_TRY_COMPILE([ +#include <unistd.h> +#ifdef HAVE_FCNTL_H +#include <fcntl.h> +#endif], +[int fd = open("/dev/null", O_DIRECT);], +samba_cv_HAVE_OPEN_O_DIRECT=yes,samba_cv_HAVE_OPEN_O_DIRECT=no)]) +if test x"$samba_cv_HAVE_OPEN_O_DIRECT" = x"yes"; then + AC_DEFINE(HAVE_OPEN_O_DIRECT,1,[Whether the open(2) accepts O_DIRECT]) +fi + ############################################### # test for where we get crypt() from AC_CHECK_LIB_EXT(crypt, CRYPT_LIBS, crypt) diff --git a/source4/client/cifsddio.c b/source4/client/cifsddio.c index 51528406bf..b13cf3fd08 100644 --- a/source4/client/cifsddio.c +++ b/source4/client/cifsddio.c @@ -99,8 +99,13 @@ open_fd_handle(const char * path, uint64_t iosz, int options) fdh->h.io_write = fd_write_func; fdh->h.io_seek = fd_seek_func; - if (options & DD_DIRECT_IO) + if (options & DD_DIRECT_IO) { +#ifdef HAVE_OPEN_O_DIRECT oflags |= O_DIRECT; +#else + DEBUG(1, ("no support for direct IO on this platform\n")); +#endif + } if (options & DD_SYNC_IO) oflags |= O_SYNC; |