]) # LC_GLIBC_SUPPORT_FHANDLES
#
-# LC_FUNC_DEV_SET_RDONLY
-#
-# check whether dev_set_rdonly is exported. This is needed until we
-# have another mechanism to fence IO from the underlying device.
-#
-AC_DEFUN([LC_FUNC_DEV_SET_RDONLY], [
-LB_CHECK_EXPORT([dev_set_rdonly], [block/ll_rw_block.c block/blk-core.c],
- [AC_DEFINE(HAVE_DEV_SET_RDONLY, 1,
- [kernel exports dev_set_rdonly])],
- [AC_MSG_WARN([kernel missing dev_set_rdonly patch for testing])])
-]) # LC_FUNC_DEV_SET_RDONLY
-
-#
# LC_STACK_SIZE
#
# Ensure the stack size is at least 8k in Lustre server (all kernels)
]) # LC_CONFIG_SUNRPC
#
+# LC_HAVE_CRYPTO_HASH
+#
+# 4.6 kernel commit 896545098777564212b9e91af4c973f094649aa7
+# removed crypto_hash support. Since GSS only works with
+# crypto_hash it has to be disabled for newer distros.
+#
+AC_DEFUN([LC_HAVE_CRYPTO_HASH], [
+LB_CHECK_COMPILE([if crypto_hash API is supported],
+crypto_hash, [
+ #include <linux/crypto.h>
+],[
+ crypto_hash_digestsize(NULL);
+], [], [enable_gss="no"])
+])
+]) # LC_HAVE_CRYPTO_HASH
+
+#
# LC_CONFIG_GSS (default 'auto' (tests for dependencies, if found, enables))
#
# Build gss and related tools of Lustre. Currently both kernel and user space
AS_IF([test "x$enable_gss" != xno], [
LC_CONFIG_GSS_KEYRING
+ LC_HAVE_CRYPTO_HASH
LC_HAVE_CRED_TGCRED
LC_KEY_TYPE_INSTANTIATE_2ARGS
sunrpc_required=$enable_gss
]) # LC_BLK_QUEUE_MAX_SEGMENTS
#
+# LC_HAVE_XATTR_HANDLER_FLAGS
+#
+# 2.6.33 added a private flag to xattr_handler
+#
+AC_DEFUN([LC_HAVE_XATTR_HANDLER_FLAGS], [
+LB_CHECK_COMPILE([if 'struct xattr_handler' has flags field],
+xattr_handler_flags, [
+ #include <linux/xattr.h>
+],[
+ struct xattr_handler handler;
+
+ handler.flags = 0;
+],[
+ AC_DEFINE(HAVE_XATTR_HANDLER_FLAGS, 1, [flags field exist])
+])
+]) # LC_HAVE_XATTR_HANDLER_FLAGS
+
+#
# LC_HAVE_DQUOT_FS_DISK_QUOTA
#
# 2.6.34 has quotactl_ops->[sg]et_dqblk that take struct fs_disk_quota
]) # LC_HAVE_CACHE_HEAD_HLIST
#
+# LC_HAVE_XATTR_HANDLER_SIMPLIFIED
+#
+# Kernel version 4.3 commit e409de992e3ea3674393465f07cc71c948edd87a
+# simplified xattr_handler handling by passing in the handler pointer
+#
+AC_DEFUN([LC_HAVE_XATTR_HANDLER_SIMPLIFIED], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if 'struct xattr_handler' functions pass in handler pointer],
+xattr_handler_simplified, [
+ #include <linux/xattr.h>
+],[
+ struct xattr_handler handler;
+
+ ((struct xattr_handler *)0)->get(&handler, NULL, NULL, NULL, 0);
+ ((struct xattr_handler *)0)->set(&handler, NULL, NULL, NULL, 0, 0);
+],[
+ AC_DEFINE(HAVE_XATTR_HANDLER_SIMPLIFIED, 1, [handler pointer is parameter])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LC_HAVE_XATTR_HANDLER_SIMPLIFIED
+
+#
# LC_HAVE_LOCKS_LOCK_FILE_WAIT
#
# 4.4 kernel have moved locks API users to
]) # LC_HAVE_IN_COMPAT_SYSCALL
#
+# LC_HAVE_XATTR_HANDLER_INODE_PARAM
+#
+# Kernel version 4.6 commit b296821a7c42fa58baa17513b2b7b30ae66f3336
+# and commit 5930122683dff58f0846b0f0405b4bd598a3ba6a added inode parameter
+# to xattr_handler functions
+#
+AC_DEFUN([LC_HAVE_XATTR_HANDLER_INODE_PARAM], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if 'struct xattr_handler' functions have inode parameter],
+xattr_handler_inode_param, [
+ #include <linux/xattr.h>
+],[
+ const struct xattr_handler handler;
+
+ ((struct xattr_handler *)0)->get(&handler, NULL, NULL, NULL, NULL, 0);
+ ((struct xattr_handler *)0)->set(&handler, NULL, NULL, NULL, NULL, 0, 0);
+],[
+ AC_DEFINE(HAVE_XATTR_HANDLER_INODE_PARAM, 1, [needs inode parameter])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LC_HAVE_XATTR_HANDLER_INODE_PARAM
+
+#
# LC_DIRECTIO_2ARGS
#
# Kernel version 4.7 commit c8b8e32d700fe943a935e435ae251364d016c497
]) # LC_FULL_NAME_HASH_3ARGS
#
+# LC_STRUCT_POSIX_ACL_XATTR
+#
+# Kernel version 4.8 commit 2211d5ba5c6c4e972ba6dbc912b2897425ea6621
+# posix_acl: xattr representation cleanups
+#
+AC_DEFUN([LC_STRUCT_POSIX_ACL_XATTR], [
+LB_CHECK_COMPILE([if 'struct posix_acl_xattr_{header,entry}' defined],
+struct_posix_acl_xattr, [
+ #include <linux/fs.h>
+ #include <linux/posix_acl_xattr.h>
+],[
+ struct posix_acl_xattr_header *h = NULL;
+ struct posix_acl_xattr_entry *e;
+ e = (void *)(h + 1);
+],[
+ AC_DEFINE(HAVE_STRUCT_POSIX_ACL_XATTR, 1,
+ [struct posix_acl_xattr_{header,entry} defined])
+])
+]) # LC_STRUCT_POSIX_ACL_XATTR
+
+#
+# LC_IOP_XATTR
+#
+# Kernel version 4.8 commit fd50ecaddf8372a1d96e0daeaac0f93cf04e4d42
+# removed {get,set,remove}xattr inode operations
+#
+AC_DEFUN([LC_IOP_XATTR], [
+LB_CHECK_COMPILE([if 'inode_operations' has {get,set,remove}xattr members],
+inode_ops_xattr, [
+ #include <linux/fs.h>
+],[
+ struct inode_operations iop;
+ iop.setxattr = NULL;
+ iop.getxattr = NULL;
+ iop.removexattr = NULL;
+],[
+ AC_DEFINE(HAVE_IOP_XATTR, 1,
+ [inode_operations has {get,set,remove}xattr members])
+])
+]) # LC_IOP_XATTR
+
+#
# LC_GROUP_INFO_GID
#
# Kernel version 4.9 commit 81243eacfa400f5f7b89f4c2323d0de9982bb0fb
]) # LC_GROUP_INFO_GID
#
-# LC_STRUCT_POSIX_ACL_XATTR
+# LC_VFS_SETXATTR
#
-# Kernel version 4.8 commit 2211d5ba5c6c4e972ba6dbc912b2897425ea6621
-# posix_acl: xattr representation cleanups
+# Kernel version 4.9 commit 5d6c31910bc0713e37628dc0ce677dcb13c8ccf4
+# added __vfs_{get,set,remove}xattr helpers
#
-AC_DEFUN([LC_STRUCT_POSIX_ACL_XATTR], [
-LB_CHECK_COMPILE([if 'struct posix_acl_xattr_{header,entry}' defined],
-struct_posix_acl_xattr, [
+AC_DEFUN([LC_VFS_SETXATTR], [
+LB_CHECK_COMPILE([if '__vfs_setxattr' helper is available],
+vfs_setxattr, [
+ #include <linux/xattr.h>
+],[
+ __vfs_setxattr(NULL, NULL, NULL, NULL, 0, 0);
+],[
+ AC_DEFINE(HAVE_VFS_SETXATTR, 1,
+ ['__vfs_setxattr is available])
+])
+]) # LC_VFS_SETXATTR
+
+#
+# LC_IOP_GENERIC_READLINK
+#
+# Kernel version 4.10 commit dfeef68862edd7d4bafe68ef7aeb5f658ef24bb5
+# removed generic_readlink from individual file systems
+#
+AC_DEFUN([LC_IOP_GENERIC_READLINK], [
+LB_CHECK_COMPILE([if 'generic_readlink' still exist],
+inode_ops_readlink, [
#include <linux/fs.h>
- #include <linux/posix_acl_xattr.h>
],[
- struct posix_acl_xattr_header *h = NULL;
- struct posix_acl_xattr_entry *e;
- e = (void *)(h + 1);
+ struct inode_operations iop;
+ iop.readlink = generic_readlink;
],[
- AC_DEFINE(HAVE_STRUCT_POSIX_ACL_XATTR, 1,
- [struct posix_acl_xattr_{header,entry} defined])
+ AC_DEFINE(HAVE_IOP_GENERIC_READLINK, 1,
+ [generic_readlink has been removed])
])
-]) # LC_STRUCT_POSIX_ACL_XATTR
+]) # LC_IOP_GENERIC_READLINK
+
+#
+# LC_HAVE_VM_FAULT_ADDRESS
+#
+# Kernel version 4.10 commit 1a29d85eb0f19b7d8271923d8917d7b4f5540b3e
+# removed virtual_address field. Need to use address field instead
+#
+AC_DEFUN([LC_HAVE_VM_FAULT_ADDRESS], [
+LB_CHECK_COMPILE([if 'struct vm_fault' replaced virtual_address with address field],
+vm_fault_address, [
+ #include <linux/mm.h>
+],[
+ struct vm_fault vmf;
+ vmf.address = NULL;
+],[
+ AC_DEFINE(HAVE_VM_FAULT_ADDRESS, 1,
+ [virtual_address has been replaced by address field])
+])
+]) # LC_HAVE_VM_FAULT_ADDRESS
#
# LC_PROG_LINUX
# 2.6.32
LC_BLK_QUEUE_MAX_SEGMENTS
+ # 2.6.33
+ LC_HAVE_XATTR_HANDLER_FLAGS
+
# 2.6.34
LC_HAVE_DQUOT_FS_DISK_QUOTA
LC_HAVE_DQUOT_SUSPEND
# 4.3
LC_HAVE_CACHE_HEAD_HLIST
+ LC_HAVE_XATTR_HANDLER_SIMPLIFIED
# 4.4
LC_HAVE_LOCKS_LOCK_FILE_WAIT
# 4.6
LC_HAVE_IN_COMPAT_SYSCALL
+ LC_HAVE_XATTR_HANDLER_INODE_PARAM
# 4.7
LC_DIRECTIO_2ARGS
LC_D_COMPARE_4ARGS
LC_FULL_NAME_HASH_3ARGS
LC_STRUCT_POSIX_ACL_XATTR
+ LC_IOP_XATTR
# 4.9
LC_GROUP_INFO_GID
+ LC_VFS_SETXATTR
+
+ # 4.10
+ LC_IOP_GENERIC_READLINK
+ LC_HAVE_VM_FAULT_ADDRESS
#
AS_IF([test "x$enable_server" != xno], [
- LC_FUNC_DEV_SET_RDONLY
LC_STACK_SIZE
LC_QUOTA64
LC_QUOTA_CONFIG
AM_CONDITIONAL(GSS_SSK, test x$enable_ssk = xyes)
AM_CONDITIONAL(LIBPTHREAD, test x$enable_libpthread = xyes)
AM_CONDITIONAL(HAVE_SYSTEMD, test "x$with_systemdsystemunitdir" != "xno")
+AM_CONDITIONAL(XATTR_HANDLER, test "x$lb_cv_compile_xattr_handler_flags" = xyes)
]) # LC_CONDITIONALS
#
lustre/scripts/systemd/Makefile
lustre/tests/Makefile
lustre/tests/mpi/Makefile
+lustre/tests/kernel/Makefile
+lustre/tests/kernel/autoMakefile
lustre/utils/Makefile
lustre/utils/gss/Makefile
lustre/osp/Makefile