#
AC_DEFUN([LC_CONFIG_SRCDIR], [
AC_CONFIG_SRCDIR([lustre/obdclass/obdo.c])
-libcfs_is_module="yes"
ldiskfs_is_ext4="yes"
])
]) # LC_GLIBC_SUPPORT_FHANDLES
#
+# LC_GLIBC_SUPPORT_COPY_FILE_RANGE
+#
+AC_DEFUN([LC_GLIBC_SUPPORT_COPY_FILE_RANGE], [
+AC_CHECK_FUNCS([copy_file_range],
+ [AC_DEFINE(HAVE_COPY_FILE_RANGE, 1,
+ [copy_file_range() is supported])],
+ [AC_MSG_WARN([copy_file_range() is not supported])])
+]) # LC_GLIBC_SUPPORT_COPY_FILE_RANGE
+
+#
# LC_STACK_SIZE
#
# Ensure the stack size is at least 8k in Lustre server (all kernels)
[], [enable_pinger="yes"])
AC_MSG_RESULT([$enable_pinger])
AS_IF([test "x$enable_pinger" != xno],
- [AC_DEFINE(ENABLE_PINGER, 1,[Use the Pinger])])
+ [AC_DEFINE(CONFIG_LUSTRE_FS_PINGER, 1,[Use the Pinger])])
]) # LC_CONFIG_PINGER
#
[], [enable_gss="auto"])
AC_MSG_RESULT([$enable_gss])
+AC_ARG_VAR([TEST_JOBS],
+ [simultaneous jobs during configure (defaults to $(nproc))])
+if test "x$ac_cv_env_TEST_JOBS_set" != "xset"; then
+ TEST_JOBS=${TEST_JOBS:-$(nproc)}
+fi
+AC_SUBST(TEST_JOBS)
+
+AC_ARG_VAR([TEST_DIR],
+ [location of temporary parallel configure tests (defaults to $PWD/lb2)])
+ TEST_DIR=${TEST_DIR:-$PWD/_lpb}
+AC_SUBST(TEST_DIR)
+
AS_IF([test "x$enable_gss" != xno], [
LC_CONFIG_GSS_KEYRING
LC_KEY_TYPE_INSTANTIATE_2ARGS
enable_getsepol="no"
AC_MSG_WARN([
-No openssk-devel headers found, unable to build l_getsepol and SELinux status checking
+No openssl-devel headers found, unable to build l_getsepol and SELinux status checking
])
])
AC_MSG_RESULT([$enable_getsepol])
]) # LC_OPENSSL_GETSEPOL
+# LC_HAVE_LIBAIO
+AC_DEFUN([LC_HAVE_LIBAIO], [
+ AC_CHECK_HEADER([libaio.h],
+ enable_libaio="yes",
+ AC_MSG_WARN([libaio is not installed in the system]))
+]) # LC_HAVE_LIBAIO
+
AC_DEFUN([LC_HAVE_PROJECT_QUOTA], [
LB_CHECK_COMPILE([if get_projid exists],
get_projid, [
]) # LC_KIOCB_KI_LEFT
#
-# LC_INIT_LIST_HEAD_RCU
-#
-# 3.12 added INIT_LIST_HEAD_RCU in commit 2a855b644c310d5db5
-# which is unfortunately an inline function and not a macro
-# that can be tested directly, so it needs a configure check.
-#
-AC_DEFUN([LC_INIT_LIST_HEAD_RCU], [
-LB_CHECK_COMPILE([if 'INIT_LIST_HEAD_RCU' exists],
-init_list_head_rcu, [
- #include <linux/list.h>
- #include <linux/rculist.h>
-],[
- struct list_head list;
- INIT_LIST_HEAD_RCU(&list);
-],[
- AC_DEFINE(HAVE_INIT_LIST_HEAD_RCU, 1,
- [INIT_LIST_HEAD_RCU exists])
-])
-]) # LC_INIT_LIST_HEAD_RCU
-
-#
# LC_VFS_RENAME_5ARGS
#
# 3.13 has vfs_rename with 5 args
]) # LC_HAVE_AIO_COMPLETE
#
+# LC_HAVE_IS_ROOT_INODE
+#
+# 3.19 kernel adds is_root_inode()
+# Commit a7400222e3eb ("new helper: is_root_inode()")
+#
+AC_DEFUN([LC_HAVE_IS_ROOT_INODE], [
+LB_CHECK_COMPILE([if kernel has is_root_inode() ],
+is_root_inode, [
+ #include <linux/fs.h>
+],[
+ is_root_inode(NULL);
+],[
+ AC_DEFINE(HAVE_IS_ROOT_INODE, 1, [is_root_inode defined])
+])
+]) # LC_HAVE_IS_ROOT_INODE
+
+#
# LC_BACKING_DEV_INFO_REMOVAL
#
# 3.20 kernel removed backing_dev_info from address_space
]) # LC_ACCOUNT_PAGE_DIRTIED_3ARGS
#
+# LC_HAVE_CRYPTO_ALLOC_SKCIPHER
+#
+# Kernel version 4.12 commit 7a7ffe65c8c5
+# introduced crypto_alloc_skcipher().
+#
+AC_DEFUN([LC_HAVE_CRYPTO_ALLOC_SKCIPHER], [
+LB_CHECK_COMPILE([if crypto_alloc_skcipher is defined],
+crypto_alloc_skcipher, [
+ #include <crypto/skcipher.h>
+],[
+ crypto_alloc_skcipher(NULL, 0, 0);
+],[
+ AC_DEFINE(HAVE_CRYPTO_ALLOC_SKCIPHER, 1,
+ [crypto_alloc_skcipher is defined])
+])
+]) # LC_HAVE_CRYPTO_ALLOC_SKCIPHER
+
+#
# LC_HAVE_INTERVAL_EXP_BLK_INTEGRITY
#
# 4.3 replace interval with interval_exp in 'struct blk_integrity'
have_clean_bdev_aliases, [
#include <linux/buffer_head.h>
],[
- struct block_device bdev;
- clean_bdev_aliases(&bdev,1,1);
+ clean_bdev_aliases(NULL,1,1);
], [
AC_DEFINE(HAVE_CLEAN_BDEV_ALIASES, 1,
[kernel has clean_bdev_aliases])
]) # LC_FOP_ITERATE_SHARED
#
+# LC_EXPORT_DEFAULT_FILE_SPLICE_READ
+#
+# 4.8-rc8 commit 82c156f853840645604acd7c2cebcb75ed1b6652 switched
+# generic_file_splice_read() to using ->read_iter. We can test this
+# change since default_file_splice_read() is no longer exported.
+#
+AC_DEFUN([LC_EXPORT_DEFAULT_FILE_SPLICE_READ], [
+LB_CHECK_EXPORT([default_file_splice_read], [fs/splice.c],
+ [AC_DEFINE(HAVE_DEFAULT_FILE_SPLICE_READ_EXPORT, 1,
+ [default_file_splice_read is exported])])
+]) # LC_EXPORT_DEFAULT_FILE_SPLCE_READ
+
+#
# LC_HAVE_POSIX_ACL_VALID_USER_NS
#
# 4.8 posix_acl_valid takes struct user_namespace
]) # LC_BI_BDEV
#
+# LC_INTERVAL_TREE_CACHED
+#
+# 4.14 f808c13fd3738948e10196496959871130612b61
+# switched INTERVAL_TREE_DEFINE to use cached RB_Trees.
+#
+AC_DEFUN([LC_INTERVAL_TREE_CACHED], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if interval_trees use rb_tree_cached],
+itree_cached, [
+ #include <linux/interval_tree_generic.h>
+ struct foo { struct rb_node rb; int last; int a,b;};
+ #define START(n) ((n)->a)
+ #define LAST(n) ((n)->b)
+ struct rb_root_cached tree;
+ INTERVAL_TREE_DEFINE(struct foo, rb, int, last,
+ START, LAST, , foo);
+],[
+ foo_insert(NULL, &tree);
+],[
+ AC_DEFINE(HAVE_INTERVAL_TREE_CACHED, 1,
+ [interval trees use rb_tree_cached])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LC_INTERVAL_TREE_CACHED
+
+#
+# LC_IS_ENCRYPTED
+#
+# 4.14 introduced IS_ENCRYPTED and S_ENCRYPTED
+#
+AC_DEFUN([LC_IS_ENCRYPTED], [
+LB_CHECK_COMPILE([if IS_ENCRYPTED is defined],
+is_encrypted, [
+ #include <linux/fs.h>
+],[
+ IS_ENCRYPTED((struct inode *)0);
+],[
+ has_is_encrypted="yes"
+])
+]) # LC_IS_ENCRYPTED
+
+#
# LC_I_PAGES
#
# kernel 4.17 commit b93b016313b3ba8003c3b8bb71f569af91f19fc7
]) # LC_VM_FAULT_T
#
+# LC_VM_FAULT_RETRY
+#
+# kernel 4.17 commit 3d3539018d2cbd12e5af4a132636ee7fd8d43ef0
+# mm: VM_FAULT_RETRY is defined in enum vm_fault_reason
+#
+AC_DEFUN([LC_VM_FAULT_RETRY], [
+LB_CHECK_COMPILE([if VM_FAULT_RETRY is defined],
+VM_FAULT_RETRY, [
+ #include <linux/mm.h>
+],[
+ #ifndef VM_FAULT_RETRY
+ vm_fault_t x;
+ x = VM_FAULT_RETRY;
+ #endif
+],[
+ AC_DEFINE(HAVE_VM_FAULT_RETRY, 1,
+ [if VM_FAULT_RETRY is defined])
+])
+]) # LC_VM_FAULT_RETRY
+
+#
# LC_INODE_TIMESPEC64
#
# kernel 4.17-rc7 commit 8efd6894ff089adeeac7cb9f32125b85d963d1bc
# When inode times are timespec64 stop using the deprecated
# time interfaces.
#
+# kernel v5.5-rc1-6-gba70609d5ec6 ba70609d5ec664a8f36ba1c857fcd97a478adf79
+# fs: Delete timespec64_trunc()
+#
AC_DEFUN([LC_INODE_TIMESPEC64], [
tmp_flags="$EXTRA_KCFLAGS"
EXTRA_KCFLAGS="-Werror"
#include <linux/fs.h>
],[
struct inode *inode = NULL;
- struct timespec64 ts = {};
+ struct timespec64 ts = {0, 1};
- inode->i_atime = timespec64_trunc(ts, 1);
+ inode->i_atime = ts;
(void)inode;
],[
AC_DEFINE(HAVE_INODE_TIMESPEC64, 1,
]) # LC_INODE_TIMESPEC64
#
-# LC_XA_IS_VALUE
-# kernel 4.19-rc6 commit 3159f943aafdbacb2f94c38fdaadabf2bbde2a14
-# xarray: Replace exceptional entries
-# adds xa_is_value
-#
-AC_DEFUN([LC_XA_IS_VALUE], [
-LB_CHECK_COMPILE([xa_is_value exist],
-xa_is_value, [
- #include <linux/xarray.h>
-],[
- xa_is_value(NULL);
-],[
- AC_DEFINE(HAVE_XA_IS_VALUE, 1, [xa_is_value exist])
-])
-]) # LC_XA_IS_VALUE
-
-#
# LC___XA_SET_MARK
#
# kernel 4.20 commit v4.19-rc5-248-g9b89a0355144
-# xarray: Add XArray marks
+# xarray: Add XArray marks - replaced radix_tree_tag_set
#
AC_DEFUN([LC___XA_SET_MARK], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
LB_CHECK_COMPILE([if '__xa_set_mark' exists],
__xa_set_mark, [
- #include <linux/xarray.h>
#include <linux/fs.h>
+ #include <linux/radix-tree.h>
],[
- struct xarray *xa = NULL;
-
- __xa_set_mark(xa, 0, PAGECACHE_TAG_DIRTY);
+ radix_tree_tag_set(NULL, 0, PAGECACHE_TAG_DIRTY);
],[
- AC_DEFINE(HAVE___XA_SET_MARK, 1,
+ AC_DEFINE(HAVE_RADIX_TREE_TAG_SET, 1,
[__xa_set_mark exists])
])
+EXTRA_KCFLAGS="$tmp_flags"
]) # LC___XA_SET_MARK
#
]) # LC_HAS_LINUX_SELINUX_ENABLED
#
+# LB_HAVE_BVEC_ITER_ALL
+#
+# kernel 5.1 commit 6dc4f100c175dd0511ae8674786e7c9006cdfbfa
+# block: allow bio_for_each_segment_all() to iterate over multi-page bvec
+#
+AC_DEFUN([LB_HAVE_BVEC_ITER_ALL], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if bvec_iter_all exists for multi-page bvec iternation],
+ext4fs_dirhash, [
+ #include <linux/bvec.h>
+],[
+ struct bvec_iter_all iter;
+ (void)iter;
+],[
+ AC_DEFINE(HAVE_BVEC_ITER_ALL, 1,
+ [if bvec_iter_all exists for multi-page bvec iternation])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LB_HAVE_BVEC_ITER_ALL
+
+#
# LC_ACCOUNT_PAGE_DIRTIED
#
# After 5.2 kernel page dirtied is not exported
]) # LC_ACCOUNT_PAGE_DIRTIED
#
+# LC_KEYRING_SEARCH_4ARGS
+#
+# Kernel 5.2 commit dcf49dbc8077
+# keys: Add a 'recurse' flag for keyring searches
+#
+AC_DEFUN([LC_KEYRING_SEARCH_4ARGS], [
+LB_CHECK_COMPILE([if 'keyring_search' has 4 args],
+keyring_search_4args, [
+ #include <linux/key.h>
+],[
+ key_ref_t keyring;
+ keyring_search(keyring, NULL, NULL, false);
+],[
+ AC_DEFINE(HAVE_KEYRING_SEARCH_4ARGS, 1,
+ [keyring_search has 4 args])
+])
+]) # LC_KEYRING_SEARCH_4ARGS
+
+#
# LC_BIO_BI_PHYS_SEGMENTS
#
# kernel 5.3-rc1 commit 14ccb66b3f585b2bc21e7256c96090abed5a512c
EXTRA_KCFLAGS="$tmp_flags"
]) # LC_LM_COMPARE_OWNER_EXISTS
+AC_DEFUN([LC_PROG_LINUX_SRC], [])
+AC_DEFUN([LC_PROG_LINUX_RESULTS], [])
+
+#
+# LC_FSCRYPT_SUPPORT
+#
+# 5.4 introduced fscrypt encryption policies v2
+#
+AC_DEFUN([LC_FSCRYPT_SUPPORT], [
+LB_CHECK_COMPILE([for fscrypt in-kernel support],
+fscrypt_support, [
+ #define __FS_HAS_ENCRYPTION 0
+ #include <linux/fscrypt.h>
+],[
+ fscrypt_ioctl_get_policy_ex(NULL, NULL);
+],[
+ dnl When Lustre supports file name encryption, restore "yes" value
+ dnl for has_fscrypt_support and remove warning message.
+ has_fscrypt_support="no"
+ AC_MSG_WARN([
+This version of Lustre lacks file name encryption support,
+so it cannot make use of in-kernel fscrypt.
+Will use embedded llcrypt if possible.])
+])
+]) # LC_FSCRYPT_SUPPORT
+
#
# LC_PROG_LINUX
#
LC_CONFIG_GSS
LC_GLIBC_SUPPORT_FHANDLES
+ LC_GLIBC_SUPPORT_COPY_FILE_RANGE
LC_OPENSSL_SSK
LC_OPENSSL_GETSEPOL
LC_OLDSIZE_TRUNCATE_PAGECACHE
LC_PTR_ERR_OR_ZERO_MISSING
LC_KIOCB_KI_LEFT
- LC_INIT_LIST_HEAD_RCU
# 3.13
LC_VFS_RENAME_5ARGS
LC_KIOCB_HAS_NBYTES
LC_HAVE_DQUOT_QC_DQBLK
LC_HAVE_AIO_COMPLETE
+ LC_HAVE_IS_ROOT_INODE
# 3.20
LC_BACKING_DEV_INFO_REMOVAL
LC_BIO_ENDIO_USES_ONE_ARG
LC_SYMLINK_OPS_USE_NAMEIDATA
LC_ACCOUNT_PAGE_DIRTIED_3ARGS
+ LC_HAVE_CRYPTO_ALLOC_SKCIPHER
# 4.3
LC_HAVE_INTERVAL_EXP_BLK_INTEGRITY
LC_FOP_ITERATE_SHARED
# 4.8
+ LC_EXPORT_DEFAULT_FILE_SPLICE_READ
LC_HAVE_POSIX_ACL_VALID_USER_NS
LC_D_COMPARE_4ARGS
LC_FULL_NAME_HASH_3ARGS
# 4.14
LC_PAGEVEC_INIT_ONE_PARAM
LC_BI_BDEV
+ LC_INTERVAL_TREE_CACHED
# 4.17
LC_VM_FAULT_T
+ LC_VM_FAULT_RETRY
LC_I_PAGES
# 4.18
LC_INODE_TIMESPEC64
- LC_XA_IS_VALUE
# 4.20
LC___XA_SET_MARK
LC_UAPI_LINUX_MOUNT_H
LC_HAVE_SUNRPC_CACHE_HASH_LOCK_IS_A_SPINLOCK
- LC_REPLACE_EXCEPTIONAL_ENTRIES
# 5.1
LC_HAS_LINUX_SELINUX_ENABLED
+ LB_HAVE_BVEC_ITER_ALL
# 5.2
LC_ACCOUNT_PAGE_DIRTIED
+ LC_KEYRING_SEARCH_4ARGS
# 5.3
LC_BIO_BI_PHYS_SEGMENTS
]) # LC_OSD_ADDON
#
+# LC_CONFIG_CRYPTO
+#
+# Check whether to enable Lustre client crypto
+#
+AC_DEFUN([LC_CONFIG_CRYPTO], [
+AC_MSG_CHECKING([whether to enable Lustre client crypto])
+AC_ARG_ENABLE([crypto],
+ AC_HELP_STRING([--enable-crypto],
+ [enable Lustre client crypto]),
+ [], [enable_crypto="auto"])
+AS_IF([test "x$enable_crypto" != xno -a "x$enable_dist" = xno], [
+ AC_MSG_RESULT(
+ )
+ LC_IS_ENCRYPTED
+ LC_FSCRYPT_SUPPORT])
+AS_IF([test "x$has_fscrypt_support" = xyes], [
+ AC_DEFINE(HAVE_LUSTRE_CRYPTO, 1, [Enable Lustre client crypto via in-kernel fscrypt])
+ enable_crypto=yes],
+ [AS_IF([test "x$has_is_encrypted" = xyes], [
+ AC_DEFINE(HAVE_LUSTRE_CRYPTO, 1, [Enable Lustre client crypto via embedded llcrypt])
+ AC_DEFINE(CONFIG_LL_ENCRYPTION, 1, [embedded llcrypt])
+ enable_crypto=yes
+ enable_llcrypt=yes], [
+ AS_IF([test "x$enable_crypto" = xyes],
+ [AC_MSG_ERROR([Lustre client crypto cannot be enabled because of lack of encryption support in your kernel.])])
+ AS_IF([test "x$enable_crypto" != xno -a "x$enable_dist" = xno],
+ [AC_MSG_WARN(Lustre client crypto cannot be enabled because of lack of encryption support in your kernel.)])
+ enable_crypto=no])])
+AS_IF([test "x$enable_dist" != xno], [
+ enable_crypto=yes
+ enable_llcrypt=yes])
+AC_MSG_RESULT([$enable_crypto])
+]) # LC_CONFIG_CRYPTO
+
+#
# LC_CONFIGURE
#
# other configure checks
AC_CHECK_HEADERS([netdb.h endian.h])
AC_CHECK_FUNCS([gethostbyname])
-# lustre/utils/llverfs.c
-AC_CHECK_HEADERS([ext2fs/ext2fs.h])
+# lustre/utils/llverfs.c lustre/utils/libmount_utils_ldiskfs.c
+AC_CHECK_HEADERS([ext2fs/ext2fs.h], [], [
+ AS_IF([test "x$enable_utils" = xyes -a "x$enable_ldiskfs" = xyes], [
+ AC_MSG_ERROR([
+ext2fs.h not found. Please install e2fsprogs development package.
+ ])
+ ])
+])
+
+# lustre/tests/statx_test.c
+AC_CHECK_FUNCS([statx])
# lustre/utils/lfs.c
AS_IF([test "$enable_dist" = "no"], [
])
AC_SUBST(SELINUX)
+AC_CHECK_LIB([keyutils], [add_key])
+
# Super safe df
AC_MSG_CHECKING([whether to report minimum OST free space])
AC_ARG_ENABLE([mindf],
AS_IF([test "x$with_bash_completion_dir" = "xyes"], [
BASH_COMPLETION_DIR="`pkg-config --variable=completionsdir bash-completion`"
AS_IF([test "x$BASH_COMPLETION_DIR" = "x"], [
- [BASH_COMPLETION_DIR="$datadir/bash-completion/completions"]
+ [BASH_COMPLETION_DIR="/usr/share/bash-completion/completions"]
])
], [
BASH_COMPLETION_DIR="$with_bash_completion_dir"
AM_CONDITIONAL(XATTR_HANDLER, test "x$lb_cv_compile_xattr_handler_flags" = xyes)
AM_CONDITIONAL(SELINUX, test "$SELINUX" = "-lselinux")
AM_CONDITIONAL(GETSEPOL, test x$enable_getsepol = xyes)
+AM_CONDITIONAL(LLCRYPT, test x$enable_llcrypt = xyes)
+AM_CONDITIONAL(LIBAIO, test x$enable_libaio = xyes)
]) # LC_CONDITIONALS
#
lustre/include/Makefile
lustre/include/lustre/Makefile
lustre/include/uapi/linux/lustre/Makefile
+lustre/kernel_patches/targets/4.18-rhel8.3.target
+lustre/kernel_patches/targets/4.18-rhel8.2.target
lustre/kernel_patches/targets/4.18-rhel8.1.target
lustre/kernel_patches/targets/4.18-rhel8.target
+lustre/kernel_patches/targets/3.10-rhel7.9.target
+lustre/kernel_patches/targets/3.10-rhel7.8.target
lustre/kernel_patches/targets/3.10-rhel7.7.target
lustre/kernel_patches/targets/3.10-rhel7.6.target
lustre/kernel_patches/targets/3.10-rhel7.5.target
lustre/kernel_patches/targets/4.14-rhel7.5.target
lustre/kernel_patches/targets/4.14-rhel7.6.target
-lustre/kernel_patches/targets/3.0-sles11.target
-lustre/kernel_patches/targets/3.0-sles11sp3.target
-lustre/kernel_patches/targets/3.0-sles11sp4.target
-lustre/kernel_patches/targets/3.12-sles12.target
-lustre/kernel_patches/targets/4.4-sles12.target
-lustre/kernel_patches/targets/4.4-sles12sp3.target
lustre/kernel_patches/targets/4.12-sles12sp4.target
+lustre/kernel_patches/targets/4.12-sles12sp5.target
+lustre/kernel_patches/targets/4.12-sles15sp1.target
+lustre/kernel_patches/targets/4.12-sles15sp2.target
lustre/kernel_patches/targets/3.x-fc18.target
lustre/ldlm/Makefile
lustre/fid/Makefile