Modify vdev_elevator_switch() to use elevator_change()
[zfs.git] / config / kernel.m4
index 260ad84..89b0a98 100644 (file)
@@ -53,6 +53,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_CREATE_UMODE_T
        ZFS_AC_KERNEL_AUTOMOUNT
        ZFS_AC_KERNEL_ENCODE_FH_WITH_INODE
+       ZFS_AC_KERNEL_COMMIT_METADATA
        ZFS_AC_KERNEL_CLEAR_INODE
        ZFS_AC_KERNEL_INSERT_INODE_LOCKED
        ZFS_AC_KERNEL_D_MAKE_ROOT
@@ -66,6 +67,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_BDI
        ZFS_AC_KERNEL_BDI_SETUP_AND_REGISTER
        ZFS_AC_KERNEL_SET_NLINK
+       ZFS_AC_KERNEL_ELEVATOR_CHANGE
 
        AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
                KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
@@ -218,24 +220,45 @@ AC_DEFUN([ZFS_AC_KERNEL], [
 dnl #
 dnl # Detect name used for the additional SPL Module.symvers file.  If one
 dnl # does not exist this is likely because the SPL has been configured
-dnl # but not built.  To allow recursive builds a good guess is made as to
-dnl # what this file will be named based on what it is named in the kernel
-dnl # build products.  This file will first be used at link time so if
-dnl # the guess is wrong the build will fail then.  This unfortunately
-dnl # means the ZFS package does not contain a reliable mechanism to
-dnl # detect symbols exported by the SPL at configure time.
+dnl # but not built.  The '--with-spl-timeout' option can be passed
+dnl # to pause here, waiting for the file to appear from a concurrently
+dnl # building SPL package.  If the file does not appear in time, a good
+dnl # guess is made as to what this file will be named based on what it
+dnl # is named in the kernel build products.  This file will first be
+dnl # used at link time so if the guess is wrong the build will fail
+dnl # then.  This unfortunately means the ZFS package does not contain a
+dnl # reliable mechanism to detect symbols exported by the SPL at
+dnl # configure time.
 dnl #
 AC_DEFUN([ZFS_AC_SPL_MODULE_SYMVERS], [
+       AC_ARG_WITH([spl-timeout],
+               AS_HELP_STRING([--with-spl-timeout=SECS],
+               [Wait SECS for symvers file to appear  @<:@default=0@:>@]),
+               [timeout="$withval"], [timeout=0])
+
        AC_MSG_CHECKING([spl file name for module symbols])
-       AS_IF([test -r $SPL_OBJ/Module.symvers], [
-               SPL_SYMBOLS=Module.symvers
-       ], [test -r $SPL_OBJ/Modules.symvers], [
-               SPL_SYMBOLS=Modules.symvers
-       ], [test -r $SPL_OBJ/module/Module.symvers], [
-               SPL_SYMBOLS=Module.symvers
-       ], [test -r $SPL_OBJ/module/Modules.symvers], [
-               SPL_SYMBOLS=Modules.symvers
-       ], [
+       SPL_SYMBOLS=NONE
+
+       while true; do
+               AS_IF([test -r $SPL_OBJ/Module.symvers], [
+                       SPL_SYMBOLS=Module.symvers
+               ], [test -r $SPL_OBJ/Modules.symvers], [
+                       SPL_SYMBOLS=Modules.symvers
+               ], [test -r $SPL_OBJ/module/Module.symvers], [
+                       SPL_SYMBOLS=Module.symvers
+               ], [test -r $SPL_OBJ/module/Modules.symvers], [
+                       SPL_SYMBOLS=Modules.symvers
+               ])
+
+               AS_IF([test $SPL_SYMBOLS != NONE -o $timeout -le 0], [
+                       break;
+               ], [
+                       sleep 1
+                       timeout=$((timeout-1))
+               ])
+       done
+
+       AS_IF([test "$SPL_SYMBOLS" = NONE], [
                SPL_SYMBOLS=$LINUX_SYMBOLS
        ])
 
@@ -260,14 +283,35 @@ AC_DEFUN([ZFS_AC_SPL], [
 
        AC_MSG_CHECKING([spl source directory])
        AS_IF([test -z "$splsrc"], [
+               dnl #
+               dnl # Look in the standard development package location
+               dnl #
                sourcelink=`ls -1d /usr/src/spl-*/${LINUX_VERSION} \
                            2>/dev/null | tail -1`
 
-               AS_IF([test -z "$sourcelink" || test ! -e $sourcelink], [
+               dnl #
+               dnl # Look in the DKMS source location
+               dnl #
+               AS_IF([test -z "$sourcelink" || test ! -e $sourcelink/spl_config.h], [
+                       sourcelink=`ls -1d /var/lib/dkms/spl/*/build \
+                                   2>/dev/null | tail -1`
+               ])
+
+               dnl #
+               dnl # Look in the parent directory
+               dnl #
+               AS_IF([test -z "$sourcelink" || test ! -e $sourcelink/spl_config.h], [
                        sourcelink=../spl
                ])
 
-               AS_IF([test -e $sourcelink], [
+               dnl #
+               dnl # Look in the kernel directory
+               dnl #
+               AS_IF([test -z "$sourcelink" || test ! -e $sourcelink/spl_config.h], [
+                       sourcelink="$LINUX"
+               ])
+
+               AS_IF([test -e $sourcelink/spl_config.h], [
                        splsrc=`readlink -f ${sourcelink}`
                ], [
                        AC_MSG_RESULT([Not found])
@@ -351,29 +395,10 @@ AC_DEFUN([ZFS_AC_KERNEL_CONFIG], [
                        [Define to 1 if licensed under the GPL])
        ])
 
-       ZFS_AC_KERNEL_CONFIG_PREEMPT
        ZFS_AC_KERNEL_CONFIG_DEBUG_LOCK_ALLOC
 ])
 
 dnl #
-dnl # Check CONFIG_PREEMPT
-dnl #
-dnl # Premptible kernels will be supported in the future.  But at the
-dnl # moment there are a few places in the code which need to be updated
-dnl # to accomidate them.  Until that work occurs we should detect this
-dnl # at configure time and fail with a sensible message.  Otherwise,
-dnl # people will be able to build successfully, however they will have
-dnl # stability problems.  See https://github.com/zfsonlinux/zfs/issues/83
-dnl #
-AC_DEFUN([ZFS_AC_KERNEL_CONFIG_PREEMPT], [
-
-       ZFS_LINUX_CONFIG([PREEMPT],
-               AC_MSG_ERROR([
-       *** Kernel built with CONFIG_PREEMPT which is not supported.
-       *** You must rebuild your kernel without this option.]), [])
-])
-
-dnl #
 dnl # Check CONFIG_DEBUG_LOCK_ALLOC
 dnl #
 dnl # This is typically only set for debug kernels because it comes with