X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=config%2Fkernel.m4;h=dd01fb28b43e3f123cb3e8fe23415b637bf89768;hb=558ef6d0805457654938dbe56c9a19b0121a712d;hp=260ad84f4f9aeaad4157fe8c0008be49c24b86ca;hpb=ee5fd0bb80d68ef095f831784cbb17181b2ba898;p=zfs.git diff --git a/config/kernel.m4 b/config/kernel.m4 index 260ad84..dd01fb2 100644 --- a/config/kernel.m4 +++ b/config/kernel.m4 @@ -49,10 +49,13 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [ ZFS_AC_KERNEL_NR_CACHED_OBJECTS ZFS_AC_KERNEL_FREE_CACHED_OBJECTS ZFS_AC_KERNEL_FALLOCATE + ZFS_AC_KERNEL_LOOKUP_NAMEIDATA + ZFS_AC_KERNEL_CREATE_NAMEIDATA ZFS_AC_KERNEL_TRUNCATE_RANGE 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 +69,8 @@ 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 + ZFS_AC_KERNEL_5ARG_SGET AS_IF([test "$LINUX_OBJ" != "$LINUX"], [ KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ" @@ -218,24 +223,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 +286,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 +398,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