Whamcloud - gitweb
LU-9183 llite: handle xattr with the xattr_handler infrastructure
[fs/lustre-release.git] / lustre / autoconf / lustre-core.m4
index 73160ae..1cde867 100644 (file)
@@ -74,19 +74,6 @@ AC_CHECK_FUNCS([name_to_handle_at],
 ]) # 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)
@@ -296,6 +283,23 @@ kernel SUNRPC support is required by using GSS.
 ]) # 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
@@ -310,6 +314,7 @@ AC_MSG_RESULT([$enable_gss])
 
 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
@@ -409,6 +414,24 @@ blk_queue_max_segments, [
 ]) # 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
@@ -687,6 +710,26 @@ LB_CHECK_EXPORT([simple_setattr], [fs/libfs.c],
 ]) # LC_EXPORT_SIMPLE_SETATTR
 
 #
+# LC_HAVE_BLK_PLUG
+#
+# 2.6.38 add struct blk_plug
+#
+AC_DEFUN([LC_HAVE_BLK_PLUG], [
+LB_CHECK_COMPILE([if 'struct blk_plug' exists],
+blk_plug, [
+       #include <linux/blkdev.h>
+],[
+       struct blk_plug plug;
+
+       blk_start_plug(&plug);
+       blk_finish_plug(&plug);
+],[
+       AC_DEFINE(HAVE_BLK_PLUG, 1,
+               [blk_plug struct exists])
+])
+]) # LC_HAVE_BLK_PLUG
+
+#
 # LC_IOP_TRUNCATE
 #
 # truncate callback removed since 2.6.39
@@ -1765,6 +1808,27 @@ truncate_ipages_final, [
 ]) # LC_HAVE_TRUNCATE_IPAGES_FINAL
 
 #
+# LC_IOPS_RENAME_WITH_FLAGS
+#
+# 3.14 has inode_operations->rename with 5 args
+# commit 520c8b16505236fc82daa352e6c5e73cd9870cff
+#
+AC_DEFUN([LC_IOPS_RENAME_WITH_FLAGS], [
+LB_CHECK_COMPILE([if 'inode_operations->rename' taken flags as argument],
+iops_rename_with_flags, [
+       #include <linux/fs.h>
+],[
+       struct inode *i1 = NULL, *i2 = NULL;
+       struct dentry *d1 = NULL, *d2 = NULL;
+       int rc;
+       rc = ((struct inode_operations *)0)->rename(i1, d1, i2, d2, 0);
+], [
+       AC_DEFINE(HAVE_IOPS_RENAME_WITH_FLAGS, 1,
+               [inode_operations->rename need flags as argument])
+])
+]) # LC_IOPS_RENAME_WITH_FLAGS
+
+#
 # LC_VFS_RENAME_6ARGS
 #
 # 3.15 has vfs_rename with 6 args
@@ -2165,6 +2229,29 @@ cache_head_has_hlist, [
 ]) # 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
@@ -2289,6 +2376,72 @@ in_compat_syscall, [
 ]) # 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
+# direct-io: eliminate the offset argument to ->direct_IO
+#
+AC_DEFUN([LC_DIRECTIO_2ARGS], [
+LB_CHECK_COMPILE([if '->direct_IO()' taken 2 arguments],
+direct_io_2args, [
+       #include <linux/fs.h>
+],[
+       struct address_space_operations ops;
+       struct iov_iter *iter = NULL;
+       struct kiocb *iocb = NULL;
+       int rc;
+       rc = ops.direct_IO(iocb, iter);
+],[
+       AC_DEFINE(HAVE_DIRECTIO_2ARGS, 1,
+               [direct_IO need 2 arguments])
+])
+]) # LC_DIRECTIO_2ARGS
+
+#
+# LC_GENERIC_WRITE_SYNC_2ARGS
+#
+# Kernel version 4.7 commit c8b8e32d700fe943a935e435ae251364d016c497
+# direct-io: eliminate the offset argument to ->direct_IO
+#
+AC_DEFUN([LC_GENERIC_WRITE_SYNC_2ARGS], [
+LB_CHECK_COMPILE([if 'generic_write_sync()' taken 2 arguments],
+generic_write_sync_2args, [
+       #include <linux/fs.h>
+],[
+       struct kiocb *iocb = NULL;
+       ssize_t rc;
+       rc = generic_write_sync(iocb, 0);
+],[
+       AC_DEFINE(HAVE_GENERIC_WRITE_SYNC_2ARGS, 1,
+               [generic_write_sync need 2 arguments])
+])
+]) # LC_GENERIC_WRITE_SYNC_2ARGS
+
+#
 # LC_HAVE_POSIX_ACL_VALID_USER_NS
 #
 # 4.8 posix_acl_valid takes struct user_namespace
@@ -2307,6 +2460,160 @@ posix_acl_valid, [
 ]) # LC_HAVE_POSIX_ACL_VALID_USER_NS
 
 #
+# LC_D_COMPARE_4ARGS
+#
+# Kernel version 4.8 commit 6fa67e707559303e086303aeecc9e8b91ef497d5
+# get rid of 'parent' argument of ->d_compare()
+#
+AC_DEFUN([LC_D_COMPARE_4ARGS], [
+LB_CHECK_COMPILE([if 'd_compare' taken 4 arguments],
+d_compare_4args, [
+       #include <linux/dcache.h>
+],[
+       ((struct dentry_operations*)0)->d_compare(NULL,0,NULL,NULL);
+],[
+       AC_DEFINE(HAVE_D_COMPARE_4ARGS, 1,
+               [d_compare need 4 arguments])
+])
+]) # LC_D_COMPARE_4ARGS
+
+#
+# LC_FULL_NAME_HASH_3ARGS
+#
+# Kernel version 4.8 commit 8387ff2577eb9ed245df9a39947f66976c6bcd02
+# vfs: make the string hashes salt the hash
+#
+AC_DEFUN([LC_FULL_NAME_HASH_3ARGS], [
+LB_CHECK_COMPILE([if 'full_name_hash' taken 3 arguments],
+full_name_hash_3args, [
+       #include <linux/stringhash.h>
+],[
+       unsigned int hash;
+       hash = full_name_hash(NULL,NULL,0);
+],[
+       AC_DEFINE(HAVE_FULL_NAME_HASH_3ARGS, 1,
+               [full_name_hash need 3 arguments])
+])
+]) # 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
+# cred: simpler, 1D supplementary groups
+#
+AC_DEFUN([LC_GROUP_INFO_GID], [
+LB_CHECK_COMPILE([if 'struct group_info' has member 'gid'],
+group_info_gid, [
+       #include <linux/cred.h>
+],[
+       kgid_t *p;
+       p = ((struct group_info *)0)->gid;
+],[
+       AC_DEFINE(HAVE_GROUP_INFO_GID, 1,
+               [struct group_info has member gid])
+])
+]) # LC_GROUP_INFO_GID
+
+#
+# LC_VFS_SETXATTR
+#
+# Kernel version 4.9 commit 5d6c31910bc0713e37628dc0ce677dcb13c8ccf4
+# added __vfs_{get,set,remove}xattr helpers
+#
+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>
+],[
+       struct inode_operations iop;
+       iop.readlink = generic_readlink;
+],[
+       AC_DEFINE(HAVE_IOP_GENERIC_READLINK, 1,
+               [generic_readlink has been removed])
+])
+]) # 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
 #
 # Lustre linux kernel checks
@@ -2327,6 +2634,9 @@ AC_DEFUN([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
@@ -2351,6 +2661,7 @@ AC_DEFUN([LC_PROG_LINUX], [
        LC_INODE_I_RCU
        LC_D_COMPARE_7ARGS
        LC_D_DELETE_CONST
+       LC_HAVE_BLK_PLUG
 
        # 2.6.39
        LC_REQUEST_QUEUE_UNPLUG_FN
@@ -2439,6 +2750,7 @@ AC_DEFUN([LC_PROG_LINUX], [
        # 3.14
        LC_HAVE_BVEC_ITER
        LC_HAVE_TRUNCATE_IPAGES_FINAL
+       LC_IOPS_RENAME_WITH_FLAGS
 
        # 3.15
        LC_VFS_RENAME_6ARGS
@@ -2478,6 +2790,7 @@ AC_DEFUN([LC_PROG_LINUX], [
 
        # 4.3
        LC_HAVE_CACHE_HEAD_HLIST
+       LC_HAVE_XATTR_HANDLER_SIMPLIFIED
 
        # 4.4
        LC_HAVE_LOCKS_LOCK_FILE_WAIT
@@ -2494,13 +2807,29 @@ AC_DEFUN([LC_PROG_LINUX], [
 
        # 4.6
        LC_HAVE_IN_COMPAT_SYSCALL
+       LC_HAVE_XATTR_HANDLER_INODE_PARAM
+
+       # 4.7
+       LC_DIRECTIO_2ARGS
+       LC_GENERIC_WRITE_SYNC_2ARGS
 
        # 4.8
        LC_HAVE_POSIX_ACL_VALID_USER_NS
+       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
@@ -2753,6 +3082,23 @@ AC_MSG_RESULT([$enable_pgstat_track])
 AS_IF([test "x$enable_pgstat_track" = xyes],
        [AC_DEFINE([CONFIG_DEBUG_PAGESTATE_TRACKING], 1,
                [enable page state tracking code])])
+
+PKG_PROG_PKG_CONFIG
+AC_MSG_CHECKING([systemd unit file directory])
+AC_ARG_WITH([systemdsystemunitdir],
+       [AS_HELP_STRING([--with-systemdsystemunitdir=DIR],
+               [Directory for systemd service files])],
+       [], [with_systemdsystemunitdir=auto])
+AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"],
+       [def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)
+       AS_IF([test "x$def_systemdsystemunitdir" = "x"],
+               [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"],
+               [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])])
+               with_systemdsystemunitdir=no],
+       [with_systemdsystemunitdir="$def_systemdsystemunitdir"])])
+AS_IF([test "x$with_systemdsystemunitdir" != "xno"],
+       [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])])
+AC_MSG_RESULT([$with_systemdsystemunitdir])
 ]) # LC_CONFIGURE
 
 #
@@ -2772,6 +3118,8 @@ AM_CONDITIONAL(GSS_KEYRING, test x$enable_gss_keyring = xyes)
 AM_CONDITIONAL(GSS_PIPEFS, test x$enable_gss_pipefs = xyes)
 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
 
 #
@@ -2853,8 +3201,11 @@ lustre/ptlrpc/gss/autoMakefile
 lustre/quota/Makefile
 lustre/quota/autoMakefile
 lustre/scripts/Makefile
+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