Whamcloud - gitweb
LU-9558 llite: handle struct vm_operations changes
[fs/lustre-release.git] / lustre / autoconf / lustre-core.m4
index 4e9850e..236bd77 100644 (file)
@@ -414,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
@@ -1753,6 +1771,25 @@ have_bvec_iter, [
 ]) # LC_HAVE_BVEC_ITER
 
 #
+# LC_IOP_SET_ACL
+#
+# 3.14 adds set_acl method to inode_operations
+# see kernel commit 893d46e443346370cd4ea81d9d35f72952c62a37
+#
+AC_DEFUN([LC_IOP_SET_ACL], [
+LB_CHECK_COMPILE([if 'inode_operations' has '.set_acl' member function],
+inode_ops_set_acl, [
+       #include <linux/fs.h>
+],[
+       struct inode_operations iop;
+       iop.set_acl = NULL;
+],[
+       AC_DEFINE(HAVE_IOP_SET_ACL, 1,
+               [inode_operations has .set_acl member function])
+])
+]) # LC_IOP_SET_ACL
+
+#
 # LC_HAVE_BI_CNT
 #
 # 4.4 redefined bi_cnt as __bi_cnt
@@ -2211,6 +2248,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
@@ -2335,6 +2395,30 @@ 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
@@ -2432,6 +2516,48 @@ full_name_hash_3args, [
 ]) # 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
@@ -2451,25 +2577,22 @@ group_info_gid, [
 ]) # 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, [
-       #include <linux/fs.h>
-       #include <linux/posix_acl_xattr.h>
+AC_DEFUN([LC_VFS_SETXATTR], [
+LB_CHECK_COMPILE([if '__vfs_setxattr' helper is available],
+vfs_setxattr, [
+       #include <linux/xattr.h>
 ],[
-       struct posix_acl_xattr_header *h = NULL;
-       struct posix_acl_xattr_entry  *e;
-       e = (void *)(h + 1);
+       __vfs_setxattr(NULL, NULL, NULL, NULL, 0, 0);
 ],[
-       AC_DEFINE(HAVE_STRUCT_POSIX_ACL_XATTR, 1,
-               [struct posix_acl_xattr_{header,entry} defined])
+       AC_DEFINE(HAVE_VFS_SETXATTR, 1,
+               ['__vfs_setxattr is available])
 ])
-]) # LC_STRUCT_POSIX_ACL_XATTR
+]) # LC_VFS_SETXATTR
 
 #
 # LC_IOP_GENERIC_READLINK
@@ -2510,6 +2633,29 @@ vm_fault_address, [
 ]) # LC_HAVE_VM_FAULT_ADDRESS
 
 #
+# LC_VM_OPERATIONS_REMOVE_VMF_ARG
+#
+# Kernel version 4.11 commit 11bac80004499ea59f361ef2a5516c84b6eab675
+# removed struct vm_area_struct as an argument for vm_operations since
+# in the same kernel version struct vma_area_struct was folded into
+# struct vm_fault.
+#
+AC_DEFUN([LC_VM_OPERATIONS_REMOVE_VMF_ARG], [
+LB_CHECK_COMPILE([if 'struct vm_operations' removed struct vm_area_struct],
+vm_operations_no_vm_area_struct, [
+       #include <linux/mm.h>
+],[
+       struct vm_fault vmf;
+
+       ((struct vm_operations_struct *)0)->fault(&vmf);
+       ((struct vm_operations_struct *)0)->page_mkwrite(&vmf);
+],[
+       AC_DEFINE(HAVE_VM_OPS_USE_VM_FAULT_ONLY, 1,
+               ['struct vm_operations' remove struct vm_area_struct argument])
+])
+]) # LC_VM_OPERATIONS_REMOVE_VMF_ARG
+
+#
 # LC_PROG_LINUX
 #
 # Lustre linux kernel checks
@@ -2530,6 +2676,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
@@ -2644,6 +2793,7 @@ AC_DEFUN([LC_PROG_LINUX], [
        LC_HAVE_BVEC_ITER
        LC_HAVE_TRUNCATE_IPAGES_FINAL
        LC_IOPS_RENAME_WITH_FLAGS
+       LC_IOP_SET_ACL
 
        # 3.15
        LC_VFS_RENAME_6ARGS
@@ -2683,6 +2833,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
@@ -2699,6 +2850,7 @@ AC_DEFUN([LC_PROG_LINUX], [
 
        # 4.6
        LC_HAVE_IN_COMPAT_SYSCALL
+       LC_HAVE_XATTR_HANDLER_INODE_PARAM
 
        # 4.7
        LC_DIRECTIO_2ARGS
@@ -2709,14 +2861,19 @@ AC_DEFUN([LC_PROG_LINUX], [
        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
 
+       # 4.11
+       LC_VM_OPERATIONS_REMOVE_VMF_ARG
+
        #
        AS_IF([test "x$enable_server" != xno], [
                LC_STACK_SIZE
@@ -3008,6 +3165,7 @@ 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
 
 #