diff options
author | James Peach <jpeach@samba.org> | 2006-01-31 21:56:12 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:51:39 -0500 |
commit | ad01edb37bdf7e1087eb18ed903b37dbc0241af1 (patch) | |
tree | e054203b4d0852a963b5bbcb03f21fa98ef1bedc | |
parent | b60415745a0038dbfdca752861201fba0d942ff6 (diff) | |
download | samba-ad01edb37bdf7e1087eb18ed903b37dbc0241af1.tar.gz samba-ad01edb37bdf7e1087eb18ed903b37dbc0241af1.tar.bz2 samba-ad01edb37bdf7e1087eb18ed903b37dbc0241af1.zip |
r13263: Check whether open(2) will accept the O_DIRECT flag. This should fix the
build on NetBSD.
(This used to be commit 7354de62a7fbf3921dfcb0bd865e89bdf1ef5bcd)
-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; |