X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fautoconf%2Flustre-core.m4;h=601da014503e03c9ecfca1a93486e8592e5c0a5e;hb=7e1758e5621df902c5942d100a75cebde8df0327;hp=500e350fc32f434c15bf6f7c4607b60886b8f7a1;hpb=1269923f82b305dbfe1c90bb92914f2093b73a86;p=fs%2Flustre-release.git diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 500e350..601da01 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -215,18 +215,6 @@ LB_CHECK_EXPORT([delete_from_page_cache], [mm/filemap.c], ]) # LC_EXPORT_TRUNCATE_COMPLETE_PAGE # -# LC_CAPA_CRYPTO -# -AC_DEFUN([LC_CAPA_CRYPTO], [ -LB_CHECK_CONFIG_IM([CRYPTO], [], - [AC_MSG_ERROR([Lustre capability require that CONFIG_CRYPTO is enabled in your kernel.])]) -LB_CHECK_CONFIG_IM([CRYPTO_HMAC], [], - [AC_MSG_ERROR([Lustre capability require that CONFIG_CRYPTO_HMAC is enabled in your kernel.])]) -LB_CHECK_CONFIG_IM([CRYPTO_SHA1], [], - [AC_MSG_ERROR([Lustre capability require that CONFIG_CRYPTO_SHA1 is enabled in your kernel.])]) -]) # LC_CAPA_CRYPTO - -# # LC_CONFIG_RMTCLIENT # dnl FIXME @@ -487,6 +475,25 @@ EXTRA_KCFLAGS=$tmp_flags ]) # LC_QUOTA64 # +# LC_HAVE_ADD_WAIT_QUEUE_EXCLUSIVE +# +# 2.6.34 adds __add_wait_queue_exclusive +# +AC_DEFUN([LC_HAVE_ADD_WAIT_QUEUE_EXCLUSIVE], [ +LB_CHECK_COMPILE([if '__add_wait_queue_exclusive' exists], +__add_wait_queue_exclusive, [ + #include +],[ + wait_queue_head_t queue; + wait_queue_t wait; + __add_wait_queue_exclusive(&queue, &wait); +],[ + AC_DEFINE(HAVE___ADD_WAIT_QUEUE_EXCLUSIVE, 1, + [__add_wait_queue_exclusive exists]) +]) +]) # LC_HAVE_ADD_WAIT_QUEUE_EXCLUSIVE + +# # LC_FS_STRUCT_RWLOCK # # 2.6.36 fs_struct.lock use spinlock instead of rwlock. @@ -819,20 +826,19 @@ lock_manager_ops_lm_xxx, [ # # LC_INODE_DIO_WAIT # -# 3.1 kills inode->i_alloc_sem, use i_dio_count and inode_dio_wait/ -# inode_dio_done instead. +# 3.1 kills inode->i_alloc_sem, use i_dio_count and inode_dio_wait +# instead. # see kernel commit bd5fe6c5eb9c548d7f07fe8f89a150bb6705e8e3 # AC_DEFUN([LC_INODE_DIO_WAIT], [ -LB_CHECK_COMPILE([if 'inode->i_alloc_sem' is killed and use inode_dio_wait/done], +LB_CHECK_COMPILE([if 'inode->i_alloc_sem' is killed and use inode_dio_wait], inode_dio_wait, [ #include ],[ inode_dio_wait((struct inode *)0); - inode_dio_done((struct inode *)0); ],[ AC_DEFINE(HAVE_INODE_DIO_WAIT, 1, - [inode->i_alloc_sem is killed and use inode_dio_wait/done]) + [inode->i_alloc_sem is killed and use inode_dio_wait]) ]) ]) # LC_INODE_DIO_WAIT @@ -1135,30 +1141,35 @@ generic_file_llseek_size_5args, [ ]) # LC_FILE_LLSEEK_SIZE_5ARG # -# LC_HAVE_DENTRY_D_ALIAS_HLIST +# LC_LLITE_DATA_IS_LIST # # 3.6 switch i_dentry/d_alias from list to hlist # -AC_DEFUN([LC_HAVE_DENTRY_D_ALIAS_HLIST], [ +# In the upstream kernels d_alias first changes +# to a hlist and then in later version, 3.11, gets +# moved to the union d_u. Due to some distros having +# d_alias in the d_u union as a struct list, which +# has never existed upstream stream, we can't test +# if d_alias is a list or hlist directly. If ever +# i_dentry and d_alias even up different combos then +# the build will fail. In that case then we will need +# to separate out the i_dentry and d_alias test below. +# +AC_DEFUN([LC_DATA_FOR_LLITE_IS_LIST], [ tmp_flags="$EXTRA_KCFLAGS" EXTRA_KCFLAGS="-Werror" -LB_CHECK_COMPILE([if 'i_dentry/d_alias' uses 'hlist'], -i_dentry_d_alias_hlist, [ +LB_CHECK_COMPILE([if 'i_dentry/d_alias' uses 'list'], +i_dentry_d_alias_list, [ #include - #include ],[ struct inode inode; - struct dentry dentry; - struct hlist_head head; - struct hlist_node node; - inode.i_dentry = head; - dentry.d_alias = node; + INIT_LIST_HEAD(&inode.i_dentry); ],[ - AC_DEFINE(HAVE_DENTRY_D_ALIAS_HLIST, 1, - [have i_dentry/d_alias uses hlist]) + AC_DEFINE(DATA_FOR_LLITE_IS_LIST, 1, + [both i_dentry/d_alias uses list]) ]) EXTRA_KCFLAGS="$tmp_flags" -]) # LC_HAVE_DENTRY_D_ALIAS_HLIST +]) # LC_DATA_FOR_LLITE_IS_LIST # # LC_DENTRY_OPEN_USE_PATH @@ -1225,14 +1236,14 @@ posix_acl_to_xattr_user_namespace, [ # 3.8 struct file has new member f_inode # AC_DEFUN([LC_HAVE_FILE_F_INODE], [ -LB_CHECK_COMPILE([if 'struct file' has memeber 'f_inode'], +LB_CHECK_COMPILE([if 'struct file' has member 'f_inode'], file_f_inode, [ #include ],[ ((struct file *)0)->f_inode = NULL; ],[ AC_DEFINE(HAVE_FILE_F_INODE, 1, - [struct file has memeber f_inode]) + [struct file has member f_inode]) ]) ]) # LC_HAVE_FILE_F_INODE @@ -1263,9 +1274,10 @@ hlist_for_each_entry_3args, [ #include #include ],[ + struct hlist_head *head = NULL; struct inode *inode; - struct dentry *dentry; - hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) { + + hlist_for_each_entry(inode, head, i_hash) { continue; } ],[ @@ -1281,7 +1293,7 @@ hlist_for_each_entry_3args, [ # f73a1c7d117d07a96d89475066188a2b79e53c48 # AC_DEFUN([LC_HAVE_BIO_END_SECTOR], [ -LB_CHECK_COMPILE([if 'bio_end_sector is defined], +LB_CHECK_COMPILE([if 'bio_end_sector' is defined], bio_end_sector, [ #include ],[ @@ -1295,21 +1307,38 @@ bio_end_sector, [ ]) # LC_HAVE_BIO_END_SECTOR # -# LC_HAVE_ONLY_PROCFS_SEQ +# LC_HAVE_REMOVE_PROC_SUBTREE # -# 3.10+ only supports procfs seq_files handling +# 3.10 introduced remove_proc_subtree # -AC_DEFUN([LC_HAVE_ONLY_PROCFS_SEQ], [ -LB_CHECK_COMPILE([if procfs only supports using 'seq_files'], -only_procfs_seq_files, [ +AC_DEFUN([LC_HAVE_REMOVE_PROC_SUBTREE], [ +LB_CHECK_COMPILE([if 'remove_proc_subtree' is defined], +remove_proc_subtree, [ #include ],[ - ((struct proc_dir_entry *)0)->write_proc(NULL, NULL, 0, NULL); -], [], [ - AC_DEFINE(HAVE_ONLY_PROCFS_SEQ, 1, - [only seq_files supported]) + remove_proc_subtree(NULL, NULL); +], [ + AC_DEFINE(HAVE_REMOVE_PROC_SUBTREE, 1, + [remove_proc_subtree is defined]) ]) -]) # LC_HAVE_ONLY_PROCFS_SEQ +]) # LC_HAVE_REMOVE_PROC_SUBTREE + +# +# LC_HAVE_PROC_REMOVE +# +# 3.10 introduced proc_remove +# +AC_DEFUN([LC_HAVE_PROC_REMOVE], [ +LB_CHECK_COMPILE([if 'proc_remove' is defined], +proc_remove, [ + #include +],[ + proc_remove(NULL); +], [ + AC_DEFINE(HAVE_PROC_REMOVE, 1, + [proc_remove is defined]) +]) +]) # LC_HAVE_PROC_REMOVE # # LC_BLKDEV_RELEASE_RETURN_INT @@ -1420,6 +1449,61 @@ truncate_pagecache_old_size, [ ]) # LC_OLDSIZE_TRUNCATE_PAGECACHE # +# LC_HAVE_DENTRY_D_U_D_ALIAS +# +# 3.11 kernel moved d_alias to the union d_u in struct dentry +# +# Some distros move d_alias to d_u but it is still a struct list +# +AC_DEFUN([LC_HAVE_DENTRY_D_U_D_ALIAS], [ +AS_IF([test "x$lb_cv_compile_i_dentry_d_alias_list" = xyes], [ + LB_CHECK_COMPILE([if list 'dentry.d_u.d_alias' exist], + d_alias, [ + #include + #include + ],[ + struct dentry de; + INIT_LIST_HEAD(&de.d_u.d_alias); + ],[ + AC_DEFINE(HAVE_DENTRY_D_U_D_ALIAS, 1, + [list dentry.d_u.d_alias exist]) + ]) +],[ + LB_CHECK_COMPILE([if hlist 'dentry.d_u.d_alias' exist], + d_alias, [ + #include + #include + ],[ + struct dentry de; + INIT_HLIST_NODE(&de.d_u.d_alias); + ],[ + AC_DEFINE(HAVE_DENTRY_D_U_D_ALIAS, 1, + [hlist dentry.d_u.d_alias exist]) + ]) +]) +]) # LC_HAVE_DENTRY_D_U_D_ALIAS + +# +# LC_HAVE_DENTRY_D_CHILD +# +# 3.11 kernel d_child has been moved out of the union d_u +# in struct dentry +# +AC_DEFUN([LC_HAVE_DENTRY_D_CHILD], [ +LB_CHECK_COMPILE([if 'dentry.d_child' exist], +d_child, [ + #include + #include +],[ + struct dentry de; + INIT_LIST_HEAD(&de.d_child); +],[ + AC_DEFINE(HAVE_DENTRY_D_CHILD, 1, + [dentry.d_child exist]) +]) +]) # LC_HAVE_DENTRY_D_CHILD + +# # LC_KIOCB_KI_LEFT # # 3.12 ki_left removed from struct kiocb @@ -1505,6 +1589,7 @@ truncate_ipages_final, [ [kernel has truncate_inode_pages_final]) ]) ]) # LC_HAVE_TRUNCATE_IPAGES_FINAL + # # LC_VFS_RENAME_6ARGS # @@ -1523,6 +1608,112 @@ vfs_rename_6args, [ ]) # LC_VFS_RENAME_6ARGS # +# LC_DIRECTIO_USE_ITER +# +# 3.16 kernel changes direct IO to use iov_iter +# +AC_DEFUN([LC_DIRECTIO_USE_ITER], [ +LB_CHECK_COMPILE([if direct IO uses iov_iter], +direct_io_iter, [ + #include +],[ + struct address_space_operations ops; + struct iov_iter *iter = NULL; + loff_t offset = 0; + + ops.direct_IO(0, NULL, iter, offset); +],[ + AC_DEFINE(HAVE_DIRECTIO_ITER, 1, + [direct IO uses iov_iter]) +]) +]) # LC_DIRECTIO_USE_ITER + +# +# 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 +],[ + 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 +],[ + struct kiocb iocb; + + iocb.ki_nbytes = 0; +],[ + AC_DEFINE(HAVE_KI_NBYTES, 1, [ki_nbytes field exist]) +]) +]) # LC_KIOCB_HAS_NBYTES + +# +# LC_CANCEL_DIRTY_PAGE +# +# 4.0.0 kernel removed cancle_dirty_page +# +AC_DEFUN([LC_CANCEL_DIRTY_PAGE], [ +LB_CHECK_COMPILE([if cancel_dirty_page still exist], +cancel_dirty_page, [ + #include +],[ + cancel_dirty_page(NULL, PAGE_SIZE); +],[ + AC_DEFINE(HAVE_CANCEL_DIRTY_PAGE, 1, + [cancel_dirty_page is still available]) +]) +]) # LC_CANCEL_DIRTY_PAGE + +# +# LC_IOV_ITER_RW +# +# 4.1 kernel has iov_iter_rw +# +AC_DEFUN([LC_IOV_ITER_RW], [ +LB_CHECK_COMPILE([if iov_iter_rw exist], +iov_iter_rw, [ + #include + #include +],[ + struct iov_iter *iter = NULL; + + iov_iter_rw(iter); +],[ + AC_DEFINE(HAVE_IOV_ITER_RW, 1, + [iov_iter_rw exist]) +]) +]) # LC_IOV_ITER_RW + +# # LC_PROG_LINUX # # Lustre linux kernel checks @@ -1538,7 +1729,6 @@ AC_DEFUN([LC_PROG_LINUX], [ LC_LLITE_LLOOP_MODULE LC_GLIBC_SUPPORT_FHANDLES - LC_CAPA_CRYPTO LC_CONFIG_RMTCLIENT LC_CONFIG_GSS @@ -1548,6 +1738,7 @@ AC_DEFUN([LC_PROG_LINUX], [ # 2.6.34 LC_HAVE_DQUOT_FS_DISK_QUOTA LC_HAVE_DQUOT_SUSPEND + LC_HAVE_ADD_WAIT_QUEUE_EXCLUSIVE # 2.6.35, 3.0.0 LC_FILE_FSYNC @@ -1608,7 +1799,7 @@ AC_DEFUN([LC_PROG_LINUX], [ LC_FILE_LLSEEK_SIZE_5ARG # 3.6 - LC_HAVE_DENTRY_D_ALIAS_HLIST + LC_DATA_FOR_LLITE_IS_LIST LC_DENTRY_OPEN_USE_PATH LC_HAVE_IOP_ATOMIC_OPEN @@ -1624,14 +1815,17 @@ AC_DEFUN([LC_PROG_LINUX], [ LC_HAVE_BIO_END_SECTOR # 3.10 - LC_HAVE_ONLY_PROCFS_SEQ LC_BLKDEV_RELEASE_RETURN_INT + LC_HAVE_REMOVE_PROC_SUBTREE + LC_HAVE_PROC_REMOVE # 3.11 LC_INVALIDATE_RANGE LC_HAVE_DIR_CONTEXT LC_D_COMPARE_5ARGS LC_HAVE_DCOUNT + LC_HAVE_DENTRY_D_U_D_ALIAS + LC_HAVE_DENTRY_D_CHILD # 3.12 LC_OLDSIZE_TRUNCATE_PAGECACHE @@ -1648,6 +1842,21 @@ AC_DEFUN([LC_PROG_LINUX], [ # 3.15 LC_VFS_RENAME_6ARGS + # 3.16 + LC_DIRECTIO_USE_ITER + + # 3.18 + LC_NFS_FILLDIR_USE_CTX + + # 3.19 + LC_KIOCB_HAS_NBYTES + + # 4.0.0 + LC_CANCEL_DIRTY_PAGE + + # 4.1.0 + LC_IOV_ITER_RW + # AS_IF([test "x$enable_server" != xno], [ LC_FUNC_DEV_SET_RDONLY @@ -1706,9 +1915,9 @@ AC_ARG_ENABLE([mpitests], MPI_Initialized(&flag); return 0; } - ])], [lb_cv_mpi_tests="yes"], [lb_cv_mpi_tests="no" - enable_mpitests=$lb_cv_mpi_tests]) + ])], [lb_cv_mpi_tests="yes"], [lb_cv_mpi_tests="no"]) ]) + enable_mpitests=$lb_cv_mpi_tests CC=$oldcc fi AC_SUBST(MPICC_WRAPPER) @@ -1840,20 +2049,19 @@ AS_IF([test $target_cpu == "i686" -o $target_cpu == "x86_64"], # maximum MDS thread count LC_MDS_MAX_THREADS +# lustre/utils/gss/gss_util.c +# lustre/utils/gss/gssd_proc.c +# lustre/utils/gss/krb5_util.c +# lustre/utils/llog_reader.c +# lustre/utils/create_iam.c +# lustre/utils/libiam.c +AC_CHECK_HEADERS([netdb.h endian.h]) +AC_CHECK_FUNCS([gethostbyname]) + # lustre/utils/llverdev.c AC_CHECK_HEADERS([blkid/blkid.h]) -# libcfs/include/libcfs/linux/linux-prim.h, ... -AC_CHECK_HEADERS([linux/types.h sys/types.h linux/unistd.h unistd.h]) - -# libcfs/include/libcfs/linux/linux-prim.h -AC_CHECK_HEADERS([linux/random.h], [], [], - [#ifdef HAVE_LINUX_TYPES_H - #include - #endif - ]) - -# utils/llverfs.c +# lustre/utils/llverfs.c AC_CHECK_HEADERS([ext2fs/ext2fs.h]) SELINUX="" @@ -1931,7 +2139,6 @@ AS_IF([test "x$enable_pgstat_track" = xyes], # AM_CONDITIONALS for lustre # AC_DEFUN([LC_CONDITIONALS], [ -AM_CONDITIONAL(LIBLUSTRE, false) AM_CONDITIONAL(MPITESTS, test x$enable_mpitests = xyes, Build MPI Tests) AM_CONDITIONAL(CLIENT, test x$enable_client = xyes) AM_CONDITIONAL(SERVER, test x$enable_server = xyes) @@ -1968,6 +2175,7 @@ lustre/kernel_patches/targets/2.6-rhel5.target lustre/kernel_patches/targets/2.6-sles11.target lustre/kernel_patches/targets/3.0-sles11.target lustre/kernel_patches/targets/3.0-sles11sp3.target +lustre/kernel_patches/targets/3.12-sles12.target lustre/kernel_patches/targets/2.6-fc11.target lustre/kernel_patches/targets/2.6-fc12.target lustre/kernel_patches/targets/2.6-fc15.target