From a245dde23a9fdbdff7d09a783bcbe3349f68a908 Mon Sep 17 00:00:00 2001 From: Nathaniel Clark Date: Wed, 11 Sep 2019 11:10:58 -0400 Subject: [PATCH] LU-12745 build: Account for optional SPL for ZFS 0.8+ With ZFS 0.8.0 and later, SPL is not longer present. Some zfs packages provide vestigial spl package contents, but zfs-dkms does not. This makes testing SPL directories optional depending on version of ZFS, this also accounts for the new location of the spl include directory under the zfs include directory. Test-Parameters: trivial Signed-off-by: Nathaniel Clark Change-Id: I8afcff079f25543a3c86df0c404146a859b226aa Reviewed-on: https://review.whamcloud.com/36161 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Brian Behlendorf Reviewed-by: Patrick Farrell Reviewed-by: Oleg Drokin --- config/lustre-build-linux.m4 | 2 +- config/lustre-build-zfs.m4 | 49 ++++++++++++++++++++++++++++---------------- lustre/osd-zfs/Makefile.in | 6 ++++-- 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4 index e1b46a3..ce8eb98 100644 --- a/config/lustre-build-linux.m4 +++ b/config/lustre-build-linux.m4 @@ -544,7 +544,7 @@ AC_DEFUN([LB_LINUX_COMPILE_IFELSE], [m4_ifvaln([$1], [AC_LANG_CONFTEST([AC_LANG_SOURCE([$1])])])dnl rm -f build/conftest.o build/conftest.mod.c build/conftest.ko SUBARCH=$(echo $target_cpu | sed -e 's/powerpc.*/powerpc/' -e 's/ppc.*/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/' -e 's/k1om/x86/' -e 's/aarch64.*/arm64/' -e 's/armv7.*/arm/') -AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] LDFLAGS= ${LD:+LD="$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_CHECK_INCLUDE -I$LINUX/arch/$SUBARCH/include -Iinclude -Iarch/$SUBARCH/include/generated -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -Iinclude/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi ${SPL_OBJ:+-include $SPL_OBJ/spl_config.h} ${ZFS_OBJ:+-include $ZFS_OBJ/zfs_config.h} ${SPL:+-I$SPL -I$SPL/include } ${ZFS:+-I$ZFS -I$ZFS/include} -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])], +AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] LDFLAGS= ${LD:+LD="$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_CHECK_INCLUDE -I$LINUX/arch/$SUBARCH/include -Iinclude -Iarch/$SUBARCH/include/generated -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -Iinclude/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi ${SPL_OBJ:+-include $SPL_OBJ/spl_config.h} ${ZFS_OBJ:+-include $ZFS_OBJ/zfs_config.h} ${SPL:+-I$SPL/include } ${ZFS:+-I$ZFS -I$ZFS/include -I${SPL:-$ZFS/include/spl}} -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])], [$4], [_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])dnl]) diff --git a/config/lustre-build-zfs.m4 b/config/lustre-build-zfs.m4 index 54d788f..80dfcff 100644 --- a/config/lustre-build-zfs.m4 +++ b/config/lustre-build-zfs.m4 @@ -111,7 +111,7 @@ AC_DEFUN([LB_SPL], [ dnl # AC_MSG_CHECKING([spl build directory]) AS_IF([test -z "$splobj"], [ - last_spl_obj_dir=$(ls -d ${splsrc}/[[0-9]]*/ | tail -n 1 | sed 's|/$||') + last_spl_obj_dir=$(ls -d ${splsrc}/[[0-9]]*/ 2> /dev/null | tail -n 1 | sed 's|/$||') AS_IF([test "${splsrc}" = "${spldkms}/source"], [ AS_IF([test -e "${spldkms}/${LINUXRELEASE}/${target_cpu}/spl_config.h"], [ splobj=${spldkms}/${LINUXRELEASE}/${target_cpu} @@ -229,7 +229,7 @@ AC_DEFUN([LB_ZFS], [ dnl # AC_MSG_CHECKING([zfs build directory]) AS_IF([test -z "$zfsobj"], [ - last_zfs_obj_dir=$(ls -d ${zfssrc}/[[0-9]]*/ | tail -n 1 | sed 's|/$||') + last_zfs_obj_dir=$(ls -d ${zfssrc}/[[0-9]]*/ 2> /dev/null | tail -n 1 | sed 's|/$||') AS_IF([test "${zfssrc}" = "${zfsdkms}/source"], [ AS_IF([test -e "${zfsdkms}/${LINUXRELEASE}/${target_cpu}/zfs_config.h"], [ zfsobj=${zfsdkms}/${LINUXRELEASE}/${target_cpu} @@ -348,21 +348,26 @@ AC_DEFUN([LB_CONFIG_ZFS], [ [AS_HELP_STRING([--with-zfs=PATH], [Path to zfs source])], [ AS_IF([test x$withval = xno], [ + enable_spl=no enable_zfs=no require_zfs=no ], [test x$withval = xyes], [ + enable_spl=yes enable_zfs=yes require_zfs=yes ], [ + enable_spl=yes enable_zfs=yes require_zfs=yes zfssrc="$withval" ]) ], [ AS_IF([test x$enable_server != xno], [ + enable_spl=yes require_zfs=no enable_zfs=yes ], [ + enable_spl=no require_zfs=no enable_zfs=no ]) @@ -373,13 +378,35 @@ AC_DEFUN([LB_CONFIG_ZFS], [ AS_IF([test x$enable_zfs = xyes], [ AS_IF([test x$enable_modules = xyes], [ - LB_SPL LB_ZFS ]) LB_ZFS_DEVEL LB_ZFS_USER dnl # + dnl # Define zfs source code version + dnl # + ZFS_MAJOR=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\1/']) + ZFS_MINOR=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\2/']) + ZFS_PATCH=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\3/']) + ZFS_FIX=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\5/']) + AS_IF([test -z "$ZFS_FIX"], [ZFS_FIX="0"]) + + AC_DEFINE_UNQUOTED([ZFS_MAJOR], [$ZFS_MAJOR], [zfs major version]) + AC_DEFINE_UNQUOTED([ZFS_MINOR], [$ZFS_MINOR], [zfs minor version]) + AC_DEFINE_UNQUOTED([ZFS_PATCH], [$ZFS_PATCH], [zfs patch version]) + AC_DEFINE_UNQUOTED([ZFS_FIX], [$ZFS_FIX], [zfs fix version]) + + dnl # + dnl # SPL is only needed if ZFS is prior to 0.8.0 + dnl # + AS_IF([test x$enable_modules = xyes && test $ZFS_MAJOR -eq 0 && test $ZFS_MINOR -lt 8], [ + LB_SPL + ],[ + enable_spl=no + ]) + + dnl # dnl # enable_zfs will be set to no in LB_SPL or LB_ZFS if dnl # one of more of the build requirements is not met. dnl # @@ -408,21 +435,6 @@ your distribution. ]) ]) - dnl # - dnl # Define zfs source code version - dnl # - AS_IF([test x$enable_zfs = xyes], [ - ZFS_MAJOR=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\1/']) - ZFS_MINOR=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\2/']) - ZFS_PATCH=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\3/']) - ZFS_FIX=$(echo $zfsver | sed -re ['s/([0-9]+)\.([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\5/']) - AS_IF([test -z "$ZFS_FIX"], [ZFS_FIX="0"]) - - AC_DEFINE_UNQUOTED([ZFS_MAJOR], [$ZFS_MAJOR], [zfs major version]) - AC_DEFINE_UNQUOTED([ZFS_MINOR], [$ZFS_MINOR], [zfs minor version]) - AC_DEFINE_UNQUOTED([ZFS_PATCH], [$ZFS_PATCH], [zfs patch version]) - AC_DEFINE_UNQUOTED([ZFS_FIX], [$ZFS_FIX], [zfs fix version]) - ]) AS_IF([test "x$enable_zfs" = xyes], [ LB_CHECK_COMPILE([if zfs defines dsl_pool_config_enter/exit], @@ -716,4 +728,5 @@ your distribution. AC_SUBST(ENABLE_ZFS, no) ]) AM_CONDITIONAL(ZFS_ENABLED, [test "x$enable_zfs" = xyes]) + AM_CONDITIONAL(SPL_ENABLED, [test "x$enable_spl" = xyes]) ]) diff --git a/lustre/osd-zfs/Makefile.in b/lustre/osd-zfs/Makefile.in index 4483348..a43df42 100644 --- a/lustre/osd-zfs/Makefile.in +++ b/lustre/osd-zfs/Makefile.in @@ -3,8 +3,10 @@ osd_zfs-objs := osd_handler.o osd_lproc.o osd_quota.o osd_zfs-objs += osd_object.o osd_io.o osd_oi.o osd_xattr.o osd_index.o osd_zfs-objs += osd_scrub.o -EXTRA_PRE_CFLAGS += -include @SPL_OBJ@/spl_config.h +@SPL_ENABLED_TRUE@EXTRA_PRE_CFLAGS += -include @SPL_OBJ@/spl_config.h +@SPL_ENABLED_TRUE@EXTRA_PRE_CFLAGS += -I@SPL@ -I@SPL@/include EXTRA_PRE_CFLAGS += -include @ZFS_OBJ@/zfs_config.h -EXTRA_PRE_CFLAGS += -I@SPL@ -I@SPL@/include -I@ZFS@ -I@ZFS@/include +EXTRA_PRE_CFLAGS += -I@ZFS@ -I@ZFS@/include +@SPL_ENABLED_FALSE@EXTRA_PRE_CFLAGS += -I@ZFS@/include/spl @INCLUDE_RULES@ -- 1.8.3.1