config: The AIO engine is indepent of HAVE_AIO now
authorVolker Lendecke <vl@samba.org>
Mon, 16 Jul 2012 10:44:42 +0000 (12:44 +0200)
committerJeremy Allison <jra@samba.org>
Wed, 18 Jul 2012 22:53:28 +0000 (15:53 -0700)
Compile the basic aio engine always, it works via libasys/pthreadpool_sync
in a sync fashion even if no pthreads are around. Everything else (linux
aio, posix aio, aio fork) is now compiled as modules based on specific
system capabilities

Signed-off-by: Jeremy Allison <jra@samba.org>
source3/configure.in
source3/modules/vfs_aio_fork.c
source3/wscript

index b5fd8c253eb018c80205c088c0645376dbbff4a0..4d3db00e40969d87bf576c19193eef4bfe110e65 100644 (file)
@@ -5542,20 +5542,19 @@ int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }])],
                fi
 fi
 
-if test x"$samba_cv_HAVE_AIO" = x"yes"; then
-       if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
-               x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
-               default_shared_modules="$default_shared_modules vfs_aio_fork"
-       fi
+if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
+       x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
+       default_shared_modules="$default_shared_modules vfs_aio_fork"
+fi
 
 # Check for Linux kernel aio support.
-       case "$host_os" in
-       *linux*)
-           AC_CHECK_LIB(aio,io_submit,[AIO_LIBS="$LIBS -laio"])
-           AC_CACHE_CHECK([for Linux kernel asynchronous io support],samba_cv_HAVE_LINUX_KERNEL_AIO,[
-           aio_LIBS=$LIBS
-           LIBS=$AIO_LIBS
-           AC_TRY_LINK([#include <unistd.h>
+case "$host_os" in
+*linux*)
+    AC_CHECK_LIB(aio,io_submit,[AIO_LIBS="$LIBS -laio"])
+    AC_CACHE_CHECK([for Linux kernel asynchronous io support],samba_cv_HAVE_LINUX_KERNEL_AIO,[
+    aio_LIBS=$LIBS
+    LIBS=$AIO_LIBS
+    AC_TRY_LINK([#include <unistd.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <fcntl.h>
@@ -5577,13 +5576,11 @@ io_submit(ctx, 1, &ioc);
 io_getevents(ctx, 1, 1, &ioev, &ts);],
 samba_cv_HAVE_LINUX_KERNEL_AIO=yes,samba_cv_HAVE_LINUX_KERNEL_AIO=no)
                LIBS=$aio_LIBS])
-           if test x"$samba_cv_HAVE_LINUX_KERNEL_AIO" = x"yes"; then
-               AC_DEFINE(HAVE_AIO, 1, [Using asynchronous io])
-               default_shared_modules="$default_shared_modules vfs_aio_linux"
-           fi
-            ;;
-        esac
-fi
+    if test x"$samba_cv_HAVE_LINUX_KERNEL_AIO" = x"yes"; then
+       default_shared_modules="$default_shared_modules vfs_aio_linux"
+    fi
+    ;;
+esac
 
 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
   default_shared_modules="$default_shared_modules vfs_aio_posix"
index c8a1fdc0f36ba6eab122ad353b4ec4348c10945d..1bbdae2985c449f9e0f38b36e00a5b43a7706811 100644 (file)
@@ -27,6 +27,8 @@
 #include "lib/async_req/async_sock.h"
 #include "lib/util/tevent_unix.h"
 
+#undef recvmsg
+
 #ifndef MAP_FILE
 #define MAP_FILE 0
 #endif
index be39a6f845ae33cdd5c5fc50e554466bc0407434..90a4b7657019c662ebdbcc63e76c359e0511110b 100755 (executable)
@@ -374,9 +374,14 @@ return acl_get_perm_np(permset_d, perm);
             conf.CHECK_CODE('struct aiocb a; return aio_error(&a);', 'HAVE_AIO_ERROR', msg='Checking for aio_error', headers='aio.h', lib='aio rt')
             conf.CHECK_CODE('struct aiocb a; return aio_cancel(1, &a);', 'HAVE_AIO_CANCEL', msg='Checking for aio_cancel', headers='aio.h', lib='aio rt')
             conf.CHECK_CODE('struct aiocb a; return aio_suspend(&a, 1, NULL);', 'HAVE_AIO_SUSPEND', msg='Checking for aio_suspend', headers='aio.h', lib='aio rt')
-           if host_os.rfind('linux') > -1:
-               conf.CHECK_FUNCS_IN('io_submit', 'aio')
-               conf.CHECK_CODE('''
+        if not conf.CONFIG_SET('HAVE_AIO'):
+            conf.DEFINE('HAVE_NO_AIO', '1')
+    else:
+        conf.DEFINE('HAVE_NO_AIO', '1')
+
+    if host_os.rfind('linux') > -1:
+       conf.CHECK_FUNCS_IN('io_submit', 'aio')
+       conf.CHECK_CODE('''
 struct io_event ioev;
 struct iocb *ioc;
 io_context_t ctx;
@@ -397,11 +402,6 @@ io_getevents(ctx, 1, 1, &ioev, &ts);
                        headers='unistd.h stdlib.h sys/types.h fcntl.h sys/eventfd.h libaio.h',
                        lib='aio')
 
-        if not conf.CONFIG_SET('HAVE_AIO'):
-            conf.DEFINE('HAVE_NO_AIO', '1')
-    else:
-        conf.DEFINE('HAVE_NO_AIO', '1')
-
     conf.CHECK_CODE('''
 struct msghdr msg;
 union {
@@ -1463,14 +1463,16 @@ main() {
     if conf.CONFIG_SET('HAVE_STATFS_F_FSID'):
         default_shared_modules.extend(TO_LIST('vfs_fileid'))
 
-    if conf.CONFIG_SET('HAVE_AIO') and (conf.CONFIG_SET('HAVE_MSGHDR_MSG_CONTROL') or conf.CONFIG_SET('HAVE_MSGHDR_MSG_ACCTRIGHTS')):
+    if (conf.CONFIG_SET('HAVE_MSGHDR_MSG_CONTROL') or conf.CONFIG_SET('HAVE_MSGHDR_MSG_ACCTRIGHTS')):
         default_shared_modules.extend(TO_LIST('vfs_aio_fork'))
 
-    if conf.CONFIG_SET('HAVE_AIO') and Options.options.with_pthreadpool:
+    if Options.options.with_pthreadpool:
         default_shared_modules.extend(TO_LIST('vfs_aio_pthread'))
+
+    if conf.CONFIG_SET('HAVE_AIO'):
         default_shared_modules.extend(TO_LIST('vfs_aio_posix'))
 
-    if conf.CONFIG_SET('HAVE_AIO') and conf.CONFIG_SET('HAVE_LINUX_KERNEL_AIO'):
+    if conf.CONFIG_SET('HAVE_LINUX_KERNEL_AIO'):
         default_shared_modules.extend(TO_LIST('vfs_aio_linux'))
 
     if conf.CONFIG_SET('HAVE_LDAP'):