])
#
-# LC_STRUCT_KIOBUF
-#
-# rh 2.4.18 has iobuf->dovary, but other kernels do not
-#
-AC_DEFUN([LC_STRUCT_KIOBUF],
-[AC_MSG_CHECKING([if struct kiobuf has a dovary field])
-LB_LINUX_TRY_COMPILE([
- #include <linux/iobuf.h>
-],[
- struct kiobuf iobuf;
- iobuf.dovary = 1;
-],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_KIOBUF_DOVARY, 1, [struct kiobuf has a dovary field])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
-#
-# LC_FUNC_COND_RESCHED
-#
-# cond_resched() was introduced in 2.4.20
-#
-AC_DEFUN([LC_FUNC_COND_RESCHED],
-[AC_MSG_CHECKING([if kernel offers cond_resched])
-LB_LINUX_TRY_COMPILE([
- #include <linux/sched.h>
-],[
- cond_resched();
-],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_COND_RESCHED, 1, [cond_resched found])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
-#
# LC_FUNC_RELEASEPAGE_WITH_INT
#
# if ->releasepage() takes an int arg in 2.6.9
fi
])
-
-#
-# LC_FUNC_ZAP_PAGE_RANGE
-#
-# if zap_page_range() takes a vma arg
-#
-AC_DEFUN([LC_FUNC_ZAP_PAGE_RANGE],
-[AC_MSG_CHECKING([if zap_page_range with vma parameter])
-ZAP_PAGE_RANGE_VMA="`grep -c 'zap_page_range.*struct vm_area_struct' $LINUX/include/linux/mm.h`"
-if test "$ZAP_PAGE_RANGE_VMA" != 0 ; then
- AC_DEFINE(ZAP_PAGE_RANGE_VMA, 1, [zap_page_range with vma parameter])
- AC_MSG_RESULT([yes])
-else
- AC_MSG_RESULT([no])
-fi
-])
-
-#
-# LC_FUNC_PDE
-#
-# if proc_fs.h defines PDE()
-#
-AC_DEFUN([LC_FUNC_PDE],
-[AC_MSG_CHECKING([if kernel defines PDE])
-HAVE_PDE="`grep -c 'proc_dir_entry..PDE' $LINUX/include/linux/proc_fs.h`"
-if test "$HAVE_PDE" != 0 ; then
- AC_DEFINE(HAVE_PDE, 1, [the kernel defines PDE])
- AC_MSG_RESULT([yes])
-else
- AC_MSG_RESULT([no])
-fi
-])
-
#
# LC_FUNC_FILEMAP_FDATASYNC
#
])
#
-# LC_FUNC_DIRECT_IO
-#
-# if direct_IO takes a struct file argument
-#
-AC_DEFUN([LC_FUNC_DIRECT_IO],
-[AC_MSG_CHECKING([if kernel passes struct file to direct_IO])
-HAVE_DIO_FILE="`grep -c 'direct_IO.*struct file' $LINUX/include/linux/fs.h`"
-if test "$HAVE_DIO_FILE" != 0 ; then
- AC_DEFINE(HAVE_DIO_FILE, 1, [the kernel passes struct file to direct_IO])
- AC_MSG_RESULT(yes)
-else
- AC_MSG_RESULT(no)
-fi
-])
-
-#
# LC_HEADER_MM_INLINE
#
# RHEL kernels define page_count in mm_inline.h
])
])
-AC_DEFUN([LC_FUNC_SET_FS_PWD],
-[LB_CHECK_SYMBOL_EXPORT([set_fs_pwd],
-[fs/namespace.c],[
- AC_DEFINE(HAVE_SET_FS_PWD, 1, [set_fs_pwd is exported])
-],[
-])
-])
-
#
# LC_CAPA_CRYPTO
#
dnl FIXME
AC_DEFUN([LC_CONFIG_RMTCLIENT],
[LB_LINUX_CONFIG_IM([CRYPTO_AES],[],[
- AC_MSG_ERROR([Lustre remote client require that CONFIG_CRYPTO_AES is enabled in your kernel.])
+ AC_MSG_WARN([Lustre remote client require that CONFIG_CRYPTO_AES is enabled in your kernel.])
])
])
AC_DEFUN([LC_CONFIG_GSS_KEYRING],
[AC_MSG_CHECKING([whether to enable gss keyring backend])
AC_ARG_ENABLE([gss_keyring],
- [AC_HELP_STRING([--disable-gss-keyring],
+ [AC_HELP_STRING([--disable-gss-keyring],
[disable gss keyring backend])],
- [],[enable_gss_keyring='yes'])
+ [],[enable_gss_keyring='yes'])
AC_MSG_RESULT([$enable_gss_keyring])
if test x$enable_gss_keyring != xno; then
- LB_LINUX_CONFIG_IM([KEYS],[],
+ LB_LINUX_CONFIG_IM([KEYS],[],
[AC_MSG_ERROR([GSS keyring backend require that CONFIG_KEYS be enabled in your kernel.])])
- AC_CHECK_LIB([keyutils], [keyctl_search], [],
+ AC_CHECK_LIB([keyutils], [keyctl_search], [],
[AC_MSG_ERROR([libkeyutils is not found, which is required by gss keyring backend])],)
- AC_DEFINE([HAVE_GSS_KEYRING], [1],
+ AC_DEFINE([HAVE_GSS_KEYRING], [1],
[Define this if you enable gss keyring backend])
fi
])
AC_MSG_RESULT([$enable_gss])
if test x$enable_gss == xyes; then
- LC_CONFIG_GSS_KEYRING
+ LC_CONFIG_GSS_KEYRING
LC_CONFIG_SUNRPC
+ AC_DEFINE([HAVE_GSS], [1], [Define this if you enable gss])
+
LB_LINUX_CONFIG_IM([CRYPTO_MD5],[],
[AC_MSG_WARN([kernel MD5 support is recommended by using GSS.])])
- LB_LINUX_CONFIG_IM([CRYPTO_SHA1],[],
+ LB_LINUX_CONFIG_IM([CRYPTO_SHA1],[],
[AC_MSG_WARN([kernel SHA1 support is recommended by using GSS.])])
- LB_LINUX_CONFIG_IM([CRYPTO_SHA256],[],
+ LB_LINUX_CONFIG_IM([CRYPTO_SHA256],[],
[AC_MSG_WARN([kernel SHA256 support is recommended by using GSS.])])
- LB_LINUX_CONFIG_IM([CRYPTO_SHA512],[],
+ LB_LINUX_CONFIG_IM([CRYPTO_SHA512],[],
[AC_MSG_WARN([kernel SHA512 support is recommended by using GSS.])])
- LB_LINUX_CONFIG_IM([CRYPTO_WP512],[],
- [AC_MSG_WARN([kernel WP512 support is recommended by using GSS.])])
- LB_LINUX_CONFIG_IM([CRYPTO_ARC4],[],
- [AC_MSG_WARN([kernel ARC4 support is recommended by using GSS.])])
- LB_LINUX_CONFIG_IM([CRYPTO_DES],[],
- [AC_MSG_WARN([kernel DES support is recommended by using GSS.])])
- LB_LINUX_CONFIG_IM([CRYPTO_TWOFISH],[],
- [AC_MSG_WARN([kernel TWOFISH support is recommended by using GSS.])])
- LB_LINUX_CONFIG_IM([CRYPTO_CAST6],[],
- [AC_MSG_WARN([kernel CAST6 support is recommended by using GSS.])])
-
- AC_CHECK_LIB([gssapi], [gss_init_sec_context],
+
+ AC_CHECK_LIB([gssapi], [gss_init_sec_context],
[GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi"],
[AC_CHECK_LIB([gssglue], [gss_init_sec_context],
[GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssglue"],
[AC_MSG_ERROR([libgssapi or libgssglue is not found, which is required by GSS.])])],)
- AC_SUBST(GSSAPI_LIBS)
+ AC_SUBST(GSSAPI_LIBS)
- AC_KERBEROS_V5
+ AC_KERBEROS_V5
fi
])
])
])
+# LC_EXPORT_SYNCHRONIZE_RCU
+# after 2.6.12 synchronize_rcu is preferred over synchronize_kernel
+AC_DEFUN([LC_EXPORT_SYNCHRONIZE_RCU],
+[LB_CHECK_SYMBOL_EXPORT([synchronize_rcu],
+[kernel/rcupdate.c],[
+ AC_DEFINE(HAVE_SYNCHRONIZE_RCU, 1,
+ [in 2.6.12 synchronize_rcu preferred over synchronize_kernel])
+],[
+])
+])
+
# LC_INODE_I_MUTEX
# after 2.6.15 inode have i_mutex intead of i_sem
AC_DEFUN([LC_INODE_I_MUTEX],
EXTRA_KCFLAGS="$tmp_flags"
])
+# inode have i_private field since 2.6.17
+AC_DEFUN([LC_INODE_IPRIVATE],
+[AC_MSG_CHECKING([if inode has a i_private field])
+LB_LINUX_TRY_COMPILE([
+#include <linux/fs.h>
+],[
+ struct inode i;
+ i.i_private = NULL;
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_INODE_IPRIVATE, 1,
+ [struct inode has i_private field])
+],[
+ AC_MSG_RESULT(no)
+])
+])
+
# 2.6.19 API changes
# inode don't have i_blksize field
AC_DEFUN([LC_INODE_BLKSIZE],
LB_LINUX_TRY_COMPILE([
#include <linux/fs.h>
],[
- struct file_operations *fops;
+ struct file_operations *fops = NULL;
fops->writev = NULL;
],[
AC_MSG_RESULT(yes)
LB_LINUX_TRY_COMPILE([
#include <linux/fs.h>
],[
- struct file_operations *fops;
+ struct file_operations *fops = NULL;
fops->readv = NULL;
],[
AC_MSG_RESULT(yes)
])
])
+AC_DEFUN([LC_EXPORT_TRUNCATE_RANGE],
+[LB_CHECK_SYMBOL_EXPORT([truncate_inode_pages_range],
+[mm/truncate.c],[
+AC_DEFINE(HAVE_TRUNCATE_RANGE, 1,
+ [kernel export truncate_inode_pages_range])
+],[
+])
+])
+
AC_DEFUN([LC_EXPORT_D_REHASH_COND],
[LB_CHECK_SYMBOL_EXPORT([d_rehash_cond],
[fs/dcache.c],[
AC_DEFUN([LC_ASYNC_BLOCK_CIPHER],
[AC_MSG_CHECKING([if kernel has block cipher support])
LB_LINUX_TRY_COMPILE([
+ #include <linux/err.h>
#include <linux/crypto.h>
],[
- int v = CRYPTO_ALG_TYPE_BLKCIPHER;
+ struct crypto_blkcipher *tfm;
+ tfm = crypto_alloc_blkcipher("aes", 0, 0 );
],[
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_ASYNC_BLOCK_CIPHER, 1, [kernel has block cipher support])
])
#
+# check for struct hash_desc
+#
+AC_DEFUN([LC_STRUCT_HASH_DESC],
+[AC_MSG_CHECKING([if kernel has struct hash_desc])
+LB_LINUX_TRY_COMPILE([
+ #include <linux/err.h>
+ #include <linux/crypto.h>
+],[
+ struct hash_desc foo;
+],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_STRUCT_HASH_DESC, 1, [kernel has struct hash_desc])
+],[
+ AC_MSG_RESULT([no])
+])
+])
+
+#
+# check for struct blkcipher_desc
+#
+AC_DEFUN([LC_STRUCT_BLKCIPHER_DESC],
+[AC_MSG_CHECKING([if kernel has struct blkcipher_desc])
+LB_LINUX_TRY_COMPILE([
+ #include <linux/err.h>
+ #include <linux/crypto.h>
+],[
+ struct blkcipher_desc foo;
+],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_STRUCT_BLKCIPHER_DESC, 1, [kernel has struct blkcipher_desc])
+],[
+ AC_MSG_RESULT([no])
+])
+])
+
+#
# check for FS_RENAME_DOES_D_MOVE flag
#
AC_DEFUN([LC_FS_RENAME_DOES_D_MOVE],
])
])
+# vfs_symlink seems to have started out with 3 args until 2.6.7 where a
+# "mode" argument was added, but then again, in some later version it was
+# removed
+AC_DEFUN([LC_4ARGS_VFS_SYMLINK],
+[AC_MSG_CHECKING([if vfs_symlink wants 4 args])
+LB_LINUX_TRY_COMPILE([
+ #include <linux/fs.h>
+],[
+ struct inode *dir;
+ struct dentry *dentry;
+ const char *oldname = NULL;
+ int mode = 0;
+
+ vfs_symlink(dir, dentry, oldname, mode);
+],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_4ARGS_VFS_SYMLINK, 1,
+ [vfs_symlink wants 4 args])
+],[
+ AC_MSG_RESULT(no)
+])
+])
+
+# Ensure stack size big than 8k in Lustre server
+AC_DEFUN([LC_STACK_SIZE],
+[AC_MSG_CHECKING([stack size big than 8k])
+LB_LINUX_TRY_COMPILE([
+ #include <linux/thread_info.h>
+],[
+ #if THREAD_SIZE < 8192
+ #error "stack size < 8192"
+ #endif
+],[
+ AC_MSG_RESULT(yes)
+],[
+ AC_MSG_ERROR([Lustre requires that Linux is configured with at least a 8KB stack.])
+])
+])
+
#
# LC_PROG_LINUX
#
[LC_LUSTRE_VERSION_H
if test x$enable_server = xyes ; then
AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+ LC_STACK_SIZE
LC_CONFIG_BACKINGFS
fi
LC_CONFIG_PINGER
LC_TASK_PPTR
# RHEL4 patches
LC_EXPORT_TRUNCATE_COMPLETE
+ LC_EXPORT_TRUNCATE_RANGE
LC_EXPORT_D_REHASH_COND
LC_EXPORT___D_REHASH
LC_EXPORT_D_MOVE_LOCKED
LC_EXPORT___D_MOVE
LC_EXPORT_NODE_TO_CPUMASK
- LC_STRUCT_KIOBUF
- LC_FUNC_COND_RESCHED
LC_FUNC_RELEASEPAGE_WITH_INT
- LC_FUNC_ZAP_PAGE_RANGE
- LC_FUNC_PDE
- LC_FUNC_DIRECT_IO
LC_HEADER_MM_INLINE
LC_STRUCT_INODE
LC_FUNC_REGISTER_CACHE
LC_STRUCT_INTENT_FILE
- LC_FUNC_SET_FS_PWD
LC_CAPA_CRYPTO
LC_CONFIG_RMTCLIENT
LC_CONFIG_GSS
LC_FUNC_RCU
LC_PERCPU_COUNTER
LC_QUOTA64
+ LC_4ARGS_VFS_SYMLINK
# does the kernel have VFS intent patches?
LC_VFS_INTENT_PATCHES
# 2.6.12
LC_RW_TREE_LOCK
+ LC_EXPORT_SYNCHRONIZE_RCU
# 2.6.15
LC_INODE_I_MUTEX
LC_SECURITY_PLUG # for SLES10 SP2
# 2.6.17
+ LC_INODE_IPRIVATE
LC_DQUOTOFF_MUTEX
# 2.6.18
LC_INVALIDATEPAGE_RETURN_INT
LC_UMOUNTBEGIN_HAS_VFSMOUNT
LC_SEQ_LOCK
+ LC_EXPORT_FILEMAP_FDATAWRITE_RANGE
if test x$enable_server = xyes ; then
LC_EXPORT_INVALIDATE_MAPPING_PAGES
- LC_EXPORT_FILEMAP_FDATAWRITE_RANGE
fi
#2.6.18 + RHEL5 (fc6)
# 2.6.22
LC_INVALIDATE_BDEV_2ARG
LC_ASYNC_BLOCK_CIPHER
+ LC_STRUCT_HASH_DESC
+ LC_STRUCT_BLKCIPHER_DESC
LC_FS_RENAME_DOES_D_MOVE
# 2.6.23
LC_UNREGISTER_BLKDEV_RETURN_INT
# --enable-mpitest
#
AC_ARG_ENABLE(mpitests,
- AC_HELP_STRING([--enable-mpitest=yes|no|mpich directory],
+ AC_HELP_STRING([--enable-mpitests=yes|no|mpicc wrapper],
[include mpi tests]),
[
enable_mpitests=yes
case $enableval in
yes)
- MPI_ROOT=/opt/mpich
- LDFLAGS="$LDFLAGS -L$MPI_ROOT/ch-p4/lib -L$MPI_ROOT/ch-p4/lib64"
- CFLAGS="$CFLAGS -I$MPI_ROOT/include"
+ MPICC_WRAPPER=mpicc
;;
no)
enable_mpitests=no
;;
- [[\\/$]]* | ?:[[\\/]]* )
- MPI_ROOT=$enableval
- LDFLAGS="$LDFLAGS -L$with_mpi/lib"
- CFLAGS="$CFLAGS -I$MPI_ROOT/include"
- ;;
*)
- AC_MSG_ERROR([expected absolute directory name for --enable-mpitests or yes or no])
+ MPICC_WRAPPER=$enableval
;;
esac
],
[
- MPI_ROOT=/opt/mpich
- LDFLAGS="$LDFLAGS -L$MPI_ROOT/ch-p4/lib -L$MPI_ROOT/ch-p4/lib64"
- CFLAGS="$CFLAGS -I$MPI_ROOT/include"
+ MPICC_WRAPPER=mpicc
enable_mpitests=yes
]
)
-AC_SUBST(MPI_ROOT)
if test x$enable_mpitests != xno; then
- AC_MSG_CHECKING([whether to mpitests can be built])
- AC_CHECK_FILE([$MPI_ROOT/include/mpi.h],
- [AC_CHECK_LIB([mpich],[MPI_Start],[enable_mpitests=yes],[enable_mpitests=no])],
- [enable_mpitests=no])
+ AC_MSG_CHECKING([whether mpitests can be built])
+ oldcc=$CC
+ CC=$MPICC_WRAPPER
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[
+ #include <mpi.h>
+ ]],[[
+ int flag;
+ MPI_Initialized(&flag);
+ ]])],
+ [
+ AC_MSG_RESULT([yes])
+ ],[
+ AC_MSG_RESULT([no])
+ enable_mpitests=no
+ ])
+ CC=$oldcc
fi
-AC_MSG_RESULT([$enable_mpitests])
-
+AC_SUBST(MPICC_WRAPPER)
AC_MSG_NOTICE([Enabling Lustre configure options for libsysio])
ac_configure_args="$ac_configure_args --with-lustre-hack --with-sockets"
])
])
+#
+# LC_QUOTA64
+# linux kernel have 64-bit limits support
+#
+AC_DEFUN([LC_QUOTA64],
+[if test x$enable_quota_module = xyes -a x$enable_server = xyes ; then
+ AC_MSG_CHECKING([if kernel has 64-bit quota limits support])
+ LB_LINUX_TRY_COMPILE([
+ #include <linux/kernel.h>
+ #include <linux/fs.h>
+ #include <linux/quotaio_v2.h>
+ int versions[] = V2_INITQVERSIONS_R1;
+ struct v2_disk_dqblk_r1 dqblk_r1;
+ ],[],[
+ AC_DEFINE(HAVE_QUOTA64, 1, [have quota64])
+ AC_MSG_RESULT([yes])
+ ],[
+ LB_CHECK_FILE([$LINUX/include/linux/lustre_version.h],[
+ AC_MSG_ERROR([You have got no 64-bit kernel quota support.])
+ ],[])
+ AC_MSG_RESULT([no])
+ ])
+fi
+])
+
# LC_SECURITY_PLUG # for SLES10 SP2
# check security plug in sles10 sp2 kernel
AC_DEFUN([LC_SECURITY_PLUG],
])
#
-# LC_QUOTA64
-# linux kernel have 64-bit limits support
-#
-AC_DEFUN([LC_QUOTA64],
-[if test x$enable_quota_module = xyes; then
- AC_MSG_CHECKING([if kernel has 64-bit quota limits support])
- LB_LINUX_TRY_COMPILE([
- #include <linux/kernel.h>
- #include <linux/fs.h>
- #include <linux/quotaio_v2.h>
- int versions[] = V2_INITQVERSIONS_R1;
- struct v2_disk_dqblk_r1 dqblk_r1;
- ],[],[
- AC_DEFINE(HAVE_QUOTA64, 1, [have quota64])
- AC_MSG_RESULT([yes])
- ],[
- LB_CHECK_FILE([$LINUX/include/linux/lustre_version.h],[
- if test x$enable_server = xyes ; then
- AC_MSG_ERROR([You have got no 64-bit kernel quota support.])
- fi
- ],[])
- AC_MSG_RESULT([no])
- ])
-fi
-])
-
-#
# LC_CONFIGURE
#
# other configure checks
lustre/fid/autoMakefile
lustre/liblustre/Makefile
lustre/liblustre/tests/Makefile
+lustre/liblustre/tests/mpi/Makefile
lustre/llite/Makefile
lustre/llite/autoMakefile
lustre/lclient/Makefile
lustre/scripts/Makefile
lustre/scripts/version_tag.pl
lustre/tests/Makefile
+lustre/tests/mpi/Makefile
lustre/utils/Makefile
lustre/utils/gss/Makefile
])