Whamcloud - gitweb
LU-6215 llite: handle kernel symlink api changes in 4.2+
[fs/lustre-release.git] / lustre / autoconf / lustre-core.m4
index 1b425c0..97f1a2d 100644 (file)
@@ -277,6 +277,40 @@ Cannot enable gss keyring. See above for details.
 ]) # LC_CONFIG_GSS_KEYRING
 
 #
+# LC_HAVE_CRED_TGCRED
+#
+# rhel7 struct cred has no member tgcred
+#
+AC_DEFUN([LC_HAVE_CRED_TGCRED], [
+LB_CHECK_COMPILE([if 'struct cred' has member 'tgcred'],
+cred_tgcred, [
+       #include <linux/cred.h>
+],[
+       ((struct cred *)0)->tgcred = NULL;
+],[
+       AC_DEFINE(HAVE_CRED_TGCRED, 1,
+               [struct cred has member tgcred])
+])
+]) # LC_HAVE_CRED_TGCRED
+
+#
+# LC_KEY_TYPE_INSTANTIATE_2ARGS
+#
+# rhel7 key_type->instantiate takes 2 args (struct key, struct key_preparsed_payload)
+#
+AC_DEFUN([LC_KEY_TYPE_INSTANTIATE_2ARGS], [
+LB_CHECK_COMPILE([if 'key_type->instantiate' has two args],
+key_type_instantiate_2args, [
+       #include <linux/key-type.h>
+],[
+       ((struct key_type *)0)->instantiate(0, NULL);
+],[
+       AC_DEFINE(HAVE_KEY_TYPE_INSTANTIATE_2ARGS, 1,
+               [key_type->instantiate has two args])
+])
+]) # LC_KEY_TYPE_INSTANTIATE_2ARGS
+
+#
 # LC_CONFIG_SUNRPC
 #
 AC_DEFUN([LC_CONFIG_SUNRPC], [
@@ -304,6 +338,8 @@ AC_MSG_RESULT([$enable_gss])
 
 AS_IF([test "x$enable_gss" != xno], [
        LC_CONFIG_GSS_KEYRING
+       LC_HAVE_CRED_TGCRED
+       LC_KEY_TYPE_INSTANTIATE_2ARGS
        sunrpc_required=$enable_gss
        LC_CONFIG_SUNRPC
        sunrpc_required="no"
@@ -322,33 +358,17 @@ AS_IF([test "x$enable_gss" != xno], [
        require_krb5="no"
 
        AS_IF([test -n "$KRBDIR"], [
-               AC_CHECK_LIB([gssapi], [gss_export_lucid_sec_context], [
-                       GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi"
-                       gss_conf_test="success"
-               ], [
-                       AC_CHECK_LIB([gssglue], [gss_export_lucid_sec_context], [
-                               GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssglue"
-                               gss_conf_test="success"
-                       ], [
-                               AS_IF([test "x$enable_gss" = xyes], [
-                                       AC_MSG_ERROR([
-
-libgssapi or libgssglue is not found, which is required by GSS.
-])
-                               ], [
-                                       AC_MSG_WARN([
-
-libgssapi or libgssglue is not found, which is required by GSS.
-])
-                               ])
-                       ])
-               ])
-               AC_SUBST(GSSAPI_LIBS)
+               gss_conf_test="success"
+       ], [
+               AC_MSG_WARN([not found!])
+               gss_conf_test="failure"
        ])
 
        AS_IF([test "x$gss_conf_test" = xsuccess], [
                AC_DEFINE([HAVE_GSS], [1], [Define this is if you enable gss])
                enable_gss="yes"
+       ], [
+               enable_gss="no"
        ])
 ])
 ]) # LC_CONFIG_GSS
@@ -929,6 +949,33 @@ inode_i_nlink_protected, [
 ]) # LC_HAVE_PROTECT_I_NLINK
 
 #
+# 2.6.39 security_inode_init_security takes a 'struct qstr' parameter
+#
+# 3.2 security_inode_init_security takes a callback to set xattrs
+#
+AC_DEFUN([LC_HAVE_SECURITY_IINITSEC], [
+LB_CHECK_COMPILE([if security_inode_init_security takes a callback],
+security_inode_init_security_callback, [
+       #include <linux/security.h>
+],[
+       security_inode_init_security(NULL, NULL, NULL, (const initxattrs)NULL, NULL);
+],[
+       AC_DEFINE(HAVE_SECURITY_IINITSEC_CALLBACK, 1,
+                 [security_inode_init_security takes a callback to set xattrs])
+],[
+       LB_CHECK_COMPILE([if security_inode_init_security takes a 'struct qstr' parameter],
+       security_inode_init_security_qstr, [
+               #include <linux/security.h>
+       ],[
+               security_inode_init_security(NULL, NULL, (struct qstr *)NULL, NULL, NULL, NULL);
+       ],[
+               AC_DEFINE(HAVE_SECURITY_IINITSEC_QSTR, 1,
+                         [security_inode_init_security takes a 'struct qstr' parameter])
+       ])
+])
+]) # LC_HAVE_SECURITY_IINITSEC
+
+#
 # LC_HAVE_MIGRATE_HEADER
 #
 # 3.3 introduces migrate_mode.h and migratepage has 4 args
@@ -1629,9 +1676,158 @@ direct_io_iter, [
 ]) # LC_DIRECTIO_USE_ITER
 
 #
+# LC_HAVE_IOV_ITER_INIT_DIRECTION
+#
+#
+# 3.16 linux commit 71d8e532b1549a478e6a6a8a44f309d050294d00
+#      changed iov_iter_init api to start accepting a tag
+#      that defines if its a read or write operation
+#
+AC_DEFUN([LC_HAVE_IOV_ITER_INIT_DIRECTION], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if 'iov_iter_init' takes a tag],
+iter_init, [
+       #include <linux/uio.h>
+       #include <linux/fs.h>
+],[
+       const struct iovec *iov = NULL;
+
+       iov_iter_init(NULL, READ, iov, 1, 0);
+],[
+       AC_DEFINE(HAVE_IOV_ITER_INIT_DIRECTION, 1,
+               [iov_iter_init handles directional tag])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LC_HAVE_IOV_ITER_INIT_DIRECTION
+
+#
+# LC_HAVE_FILE_OPERATIONS_READ_WRITE_ITER
+#
+# 3.16 introduces [read|write]_iter to struct file_operations
+#
+AC_DEFUN([LC_HAVE_FILE_OPERATIONS_READ_WRITE_ITER], [
+LB_CHECK_COMPILE([if 'file_operations.[read|write]_iter' exist],
+file_function_iter, [
+       #include <linux/fs.h>
+],[
+       ((struct file_operations *)NULL)->read_iter(NULL, NULL);
+       ((struct file_operations *)NULL)->write_iter(NULL, NULL);
+],[
+       AC_DEFINE(HAVE_FILE_OPERATIONS_READ_WRITE_ITER, 1,
+               [file_operations.[read|write]_iter functions exist])
+])
+]) # LC_HAVE_FILE_OPERATIONS_READ_WRITE_ITER
+
+#
+# LC_KEY_MATCH_DATA
+#
+# 3.17 replaces key_type::match with match_preparse
+#      and has new struct key_match_data
+#
+AC_DEFUN([LC_KEY_MATCH_DATA], [
+LB_CHECK_COMPILE([if struct key_match field exist],
+key_match, [
+       #include <linux/key-type.h>
+],[
+       struct key_match_data data;
+],[
+       AC_DEFINE(HAVE_KEY_MATCH_DATA, 1,
+               [struct key_match_data exist])
+])
+]) # LC_KEY_MATCH_DATA
+
+#
+# LC_NFS_FILLDIR_USE_CTX
+#
+# 3.18 kernel moved from void cookie to struct dir_context
+#
+AC_DEFUN([LC_NFS_FILLDIR_USE_CTX], [
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_CHECK_COMPILE([if filldir_t uses struct dir_context],
+filldir_ctx, [
+       #include <linux/fs.h>
+],[
+       int filldir(struct dir_context *ctx, const char* name,
+                   int i, loff_t off, u64 tmp, unsigned temp)
+       {
+               return 0;
+       }
+
+       struct dir_context ctx = {
+               .actor = filldir,
+       };
+
+       ctx.actor(NULL, "test", 0, (loff_t) 0, 0, 0);
+],[
+       AC_DEFINE(HAVE_FILLDIR_USE_CTX, 1,
+               [filldir_t needs struct dir_context as argument])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LC_NFS_FILLDIR_USE_CTX
+
+#
+# LC_KIOCB_HAS_NBYTES
+#
+# 3.19 kernel removed ki_nbytes from struct kiocb
+#
+AC_DEFUN([LC_KIOCB_HAS_NBYTES], [
+LB_CHECK_COMPILE([if struct kiocb has ki_nbytes field],
+ki_nbytes, [
+       #include <linux/fs.h>
+],[
+       struct kiocb iocb;
+
+       iocb.ki_nbytes = 0;
+],[
+       AC_DEFINE(HAVE_KI_NBYTES, 1, [ki_nbytes field exist])
+])
+]) # LC_KIOCB_HAS_NBYTES
+
+#
+# LC_BACKING_DEV_INFO_REMOVAL
+#
+# 3.20 kernel removed backing_dev_info from address_space
+#
+AC_DEFUN([LC_BACKING_DEV_INFO_REMOVAL], [
+LB_CHECK_COMPILE([if struct address_space has backing_dev_info],
+backing_dev_info, [
+       #include <linux/fs.h>
+],[
+       struct address_space mapping;
+
+       mapping.backing_dev_info = NULL;
+],[
+       AC_DEFINE(HAVE_BACKING_DEV_INFO, 1, [backing_dev_info exist])
+])
+]) # LC_BACKING_DEV_INFO_REMOVAL
+
+#
+# LC_HAVE_BDI_CAP_MAP_COPY
+#
+# 3.20  removed mmap handling for backing devices since
+#      it breaks on non-MMU systems. See kernel commit
+#      b4caecd48005fbed3949dde6c1cb233142fd69e9
+#
+AC_DEFUN([LC_HAVE_BDI_CAP_MAP_COPY], [
+LB_CHECK_COMPILE([if have 'BDI_CAP_MAP_COPY'],
+bdi_cap_map_copy, [
+       #include <linux/backing-dev.h>
+],[
+       struct backing_dev_info info;
+
+       info.capabilities = BDI_CAP_MAP_COPY;
+],[
+       AC_DEFINE(HAVE_BDI_CAP_MAP_COPY, 1,
+               [BDI_CAP_MAP_COPY exist])
+])
+]) # LC_HAVE_BDI_CAP_MAP_COPY
+
+#
 # LC_CANCEL_DIRTY_PAGE
 #
-# 4.0.0 kernel removed cancle_dirty_page
+# 4.0.0 kernel removed cancel_dirty_page
 #
 AC_DEFUN([LC_CANCEL_DIRTY_PAGE], [
 LB_CHECK_COMPILE([if cancel_dirty_page still exist],
@@ -1666,6 +1862,56 @@ iov_iter_rw, [
 ]) # LC_IOV_ITER_RW
 
 #
+# LC_HAVE_SYNC_READ_WRITE
+#
+# 4.1 new_sync_[read|write] no longer exported
+#
+AC_DEFUN([LC_HAVE_SYNC_READ_WRITE], [
+LB_CHECK_EXPORT([new_sync_read], [fs/read_write.c],
+       [AC_DEFINE(HAVE_SYNC_READ_WRITE, 1,
+                       [new_sync_[read|write] is exported by the kernel])])
+]) # LC_HAVE_SYNC_READ_WRITE
+
+#
+# LC_NEW_CANCEL_DIRTY_PAGE
+#
+# 4.2 kernel has new cancel_dirty_page
+#
+AC_DEFUN([LC_NEW_CANCEL_DIRTY_PAGE], [
+LB_CHECK_COMPILE([if cancel_dirty_page with one argument exist],
+new_cancel_dirty_page, [
+       #include <linux/mm.h>
+],[
+       cancel_dirty_page(NULL);
+],[
+       AC_DEFINE(HAVE_NEW_CANCEL_DIRTY_PAGE, 1,
+               [cancel_dirty_page with one arguement is available])
+])
+]) # LC_NEW_CANCEL_DIRTY_PAGE
+
+#
+# LC_SYMLINK_OPS_USE_NAMEIDATA
+#
+# For the 4.2+ kernels the file system internal symlink api no
+# longer uses struct nameidata as a argument
+#
+AC_DEFUN([LC_SYMLINK_OPS_USE_NAMEIDATA], [
+LB_CHECK_COMPILE([if symlink inode operations have struct nameidata argument],
+symlink_use_nameidata, [
+       #include <linux/namei.h>
+       #include <linux/fs.h>
+],[
+       struct nameidata *nd = NULL;
+
+       ((struct inode_operations *)0)->follow_link(NULL, nd);
+       ((struct inode_operations *)0)->put_link(NULL, nd, NULL);
+],[
+       AC_DEFINE(HAVE_SYMLINK_OPS_USE_NAMEIDATA, 1,
+               [symlink inode operations need struct nameidata argument])
+])
+]) # LC_SYMLINK_OPS_USE_NAMEIDATA
+
+#
 # LC_PROG_LINUX
 #
 # Lustre linux kernel checks
@@ -1718,6 +1964,7 @@ AC_DEFUN([LC_PROG_LINUX], [
        LC_HAVE_FSTYPE_MOUNT
        LC_IOP_TRUNCATE
        LC_HAVE_INODE_OWNER_OR_CAPABLE
+       LC_HAVE_SECURITY_IINITSEC
 
        # 3.0
        LC_DIRTY_INODE_WITH_FLAG
@@ -1796,12 +2043,32 @@ AC_DEFUN([LC_PROG_LINUX], [
 
        # 3.16
        LC_DIRECTIO_USE_ITER
+       LC_HAVE_IOV_ITER_INIT_DIRECTION
+       LC_HAVE_FILE_OPERATIONS_READ_WRITE_ITER
+
+       # 3.17
+       LC_KEY_MATCH_DATA
+
+       # 3.18
+       LC_NFS_FILLDIR_USE_CTX
+
+       # 3.19
+       LC_KIOCB_HAS_NBYTES
+
+       # 3.20
+       LC_BACKING_DEV_INFO_REMOVAL
+       LC_HAVE_BDI_CAP_MAP_COPY
 
        # 4.0.0
        LC_CANCEL_DIRTY_PAGE
 
        # 4.1.0
        LC_IOV_ITER_RW
+       LC_HAVE_SYNC_READ_WRITE
+
+       # 4.2
+       LC_NEW_CANCEL_DIRTY_PAGE
+       LC_SYMLINK_OPS_USE_NAMEIDATA
 
        #
        AS_IF([test "x$enable_server" != xno], [
@@ -1990,7 +2257,7 @@ AC_MSG_NOTICE([Lustre core checks
 LC_CONFIG_OBD_BUFFER_SIZE
 
 AS_IF([test $target_cpu == "i686" -o $target_cpu == "x86_64"],
-       [CFLAGS="$CFLAGS -Werror"])
+       [CFLAGS="$CFLAGS -Wall -Werror"])
 
 # maximum MDS thread count
 LC_MDS_MAX_THREADS
@@ -2115,6 +2382,7 @@ lustre/include/Makefile
 lustre/include/lustre_ver.h
 lustre/include/lustre/Makefile
 lustre/kernel_patches/targets/3.10-rhel7.target
+lustre/kernel_patches/targets/2.6-rhel6.7.target
 lustre/kernel_patches/targets/2.6-rhel6.6.target
 lustre/kernel_patches/targets/2.6-rhel6.target
 lustre/kernel_patches/targets/2.6-rhel5.target