])
#
-# LC_CONFIG_EXT3
+# Ensure stack size big than 8k in Lustre server (all kernels)
#
-# that ext3 is enabled in the kernel
-#
-AC_DEFUN([LC_CONFIG_EXT3],
-[LB_LINUX_CONFIG([EXT3_FS],[],[
- LB_LINUX_CONFIG([EXT3_FS_MODULE],[],[$2])
-])
-LB_LINUX_CONFIG([EXT3_FS_XATTR],[$1],[$3])
-])
-
-#
-# LC_FSHOOKS
-#
-# If we have (and can build) fshooks.h
-#
-AC_DEFUN([LC_FSHOOKS],
-[LB_CHECK_FILE([$LINUX/include/linux/fshooks.h],[
- AC_MSG_CHECKING([if fshooks.h can be compiled])
- LB_LINUX_TRY_COMPILE([
- #include <linux/fshooks.h>
- ],[],[
- AC_MSG_RESULT([yes])
- ],[
- AC_MSG_RESULT([no])
- AC_MSG_WARN([You might have better luck with gcc 3.3.x.])
- AC_MSG_WARN([You can set CC=gcc33 before running configure.])
- AC_MSG_ERROR([Your compiler cannot build fshooks.h.])
- ])
-$1
-],[
-$2
-])
-])
-
-#
-# LC_FUNC_RELEASEPAGE_WITH_INT
-#
-# if ->releasepage() takes an int arg in 2.6.9
-# This kernel defines gfp_t (HAS_GFP_T) but doesn't use it for this function,
-# while others either don't have gfp_t or pass gfp_t as the parameter.
-#
-AC_DEFUN([LC_FUNC_RELEASEPAGE_WITH_INT],
-[AC_MSG_CHECKING([if releasepage has a int parameter])
-RELEASEPAGE_WITH_INT="`grep -c 'releasepage.*int' $LINUX/include/linux/fs.h`"
-if test "$RELEASEPAGE_WITH_INT" != 0 ; then
- AC_DEFINE(HAVE_RELEASEPAGE_WITH_INT, 1,
- [releasepage with int parameter])
- AC_MSG_RESULT([yes])
-else
- AC_MSG_RESULT([no])
-fi
-])
-
-#
-# LC_FUNC_FILEMAP_FDATASYNC
-#
-# if filemap_fdatasync() exists
-#
-AC_DEFUN([LC_FUNC_FILEMAP_FDATAWRITE],
-[AC_MSG_CHECKING([whether filemap_fdatawrite() is defined])
-LB_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
-],[
- int (*foo)(struct address_space *)= filemap_fdatawrite;
-],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_FILEMAP_FDATAWRITE, 1, [filemap_fdatawrite() found])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
-#
-# LC_HEADER_MM_INLINE
-#
-# RHEL kernels define page_count in mm_inline.h
-#
-AC_DEFUN([LC_HEADER_MM_INLINE],
-[AC_MSG_CHECKING([if kernel has mm_inline.h header])
-LB_LINUX_TRY_COMPILE([
- #include <linux/mm_inline.h>
-],[
- #ifndef page_count
- #error mm_inline.h does not define page_count
- #endif
-],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_MM_INLINE, 1, [mm_inline found])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
-#
-# LC_STRUCT_INODE
-#
-# if inode->i_alloc_sem exists
-#
-AC_DEFUN([LC_STRUCT_INODE],
-[AC_MSG_CHECKING([if struct inode has i_alloc_sem])
-LB_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
- #include <linux/version.h>
-],[
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,24))
- #error "down_read_trylock broken before 2.4.24"
- #endif
- struct inode i;
- return (char *)&i.i_alloc_sem - (char *)&i;
-],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_I_ALLOC_SEM, 1, [struct inode has i_alloc_sem])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
-#
-# LC_FUNC_REGISTER_CACHE
-#
-# if register_cache() is defined by kernel
-#
-# There are two ways to shrink one customized cache in linux kernels. For the
-# kernels are prior than 2.6.5(?), register_cache() is used, and for latest
-# kernels, set_shrinker() is used instead.
-#
-AC_DEFUN([LC_FUNC_REGISTER_CACHE],
-[AC_MSG_CHECKING([if kernel defines cache pressure hook])
+AC_DEFUN([LC_STACK_SIZE],
+[AC_MSG_CHECKING([stack size big than 8k])
LB_LINUX_TRY_COMPILE([
- #include <linux/mm.h>
+ #include <linux/thread_info.h>
],[
- shrinker_t shrinker;
-
- set_shrinker(1, shrinker);
+ #if THREAD_SIZE < 8192
+ #error "stack size < 8192"
+ #endif
],[
- AC_MSG_RESULT([set_shrinker])
- AC_DEFINE(HAVE_SHRINKER_CACHE, 1, [shrinker_cache found])
- AC_DEFINE(HAVE_CACHE_RETURN_INT, 1, [shrinkers should return int])
+ AC_MSG_RESULT(yes)
],[
- LB_LINUX_TRY_COMPILE([
- #include <linux/list.h>
- #include <linux/cache_def.h>
- ],[
- struct cache_definition cache;
- ],[
- AC_MSG_RESULT([register_cache])
- AC_DEFINE(HAVE_REGISTER_CACHE, 1, [register_cache found])
- AC_MSG_CHECKING([if kernel expects return from cache shrink ])
- tmp_flags="$EXTRA_KCFLAGS"
- EXTRA_KCFLAGS="-Werror"
- LB_LINUX_TRY_COMPILE([
- #include <linux/list.h>
- #include <linux/cache_def.h>
- ],[
- struct cache_definition c;
- c.shrinker = (int (*)(int, unsigned int))1;
- ],[
- AC_DEFINE(HAVE_CACHE_RETURN_INT, 1,
- [kernel expects return from shrink_cache])
- AC_MSG_RESULT(yes)
- ],[
- AC_MSG_RESULT(no)
- ])
- EXTRA_KCFLAGS="$tmp_flags"
- ],[
- AC_MSG_RESULT([no])
- ])
+ AC_MSG_ERROR([Lustre requires that Linux is configured with at least a 8KB stack.])
])
])
#
-# LC_FUNC_GRAB_CACHE_PAGE_NOWAIT_GFP
-#
-# check for our patched grab_cache_page_nowait_gfp() function
-#
-AC_DEFUN([LC_FUNC_GRAB_CACHE_PAGE_NOWAIT_GFP],
-[AC_MSG_CHECKING([if kernel defines grab_cache_page_nowait_gfp()])
-HAVE_GCPN_GFP="`grep -c 'grab_cache_page_nowait_gfp' $LINUX/include/linux/pagemap.h`"
-if test "$HAVE_GCPN_GFP" != 0 ; then
- AC_DEFINE(HAVE_GRAB_CACHE_PAGE_NOWAIT_GFP, 1,
- [kernel has grab_cache_page_nowait_gfp()])
- AC_MSG_RESULT(yes)
-else
- AC_MSG_RESULT(no)
-fi
-])
-
-#
# LC_FUNC_DEV_SET_RDONLY
#
# check for the old-style dev_set_rdonly which took an extra "devno" param
[AC_MSG_CHECKING([if kernel has new dev_set_rdonly])
LB_LINUX_TRY_COMPILE([
#include <linux/fs.h>
+ #include <linux/blkdev.h>
],[
#ifndef HAVE_CLEAR_RDONLY_ON_PUT
#error needs to be patched by lustre kernel patches from Lustre version 1.4.3 or above.
AC_MSG_RESULT([yes])
AC_DEFINE(HAVE_DEV_SET_RDONLY, 1, [kernel has new dev_set_rdonly])
],[
- AC_MSG_RESULT([no, Linux kernel source needs to be patches by lustre
+ AC_MSG_ERROR([no, Linux kernel source needs to be patches by lustre
kernel patches from Lustre version 1.4.3 or above.])
])
])
BACKINGFS="ldiskfs"
if test x$with_ldiskfs = xno ; then
- BACKINGFS="ext3"
-
if test x$linux25$enable_server = xyesyes ; then
AC_MSG_ERROR([ldiskfs is required for 2.6-based servers.])
fi
-
- # --- Check that ext3 and ext3 xattr are enabled in the kernel
- LC_CONFIG_EXT3([],[
- AC_MSG_ERROR([Lustre requires that ext3 is enabled in the kernel])
- ],[
- AC_MSG_WARN([Lustre requires that extended attributes for ext3 are enabled in the kernel])
- AC_MSG_WARN([This build may fail.])
- ])
else
# ldiskfs is enabled
LB_DEFINE_LDISKFS_OPTIONS
])
])
-AC_DEFUN([LC_FUNC_PAGE_MAPPED],
-[AC_MSG_CHECKING([if kernel offers page_mapped])
+#
+# LC_FUNC_MS_FLOCK_LOCK
+#
+# 2.6.5 kernel has MS_FLOCK_LOCK sb flag
+#
+AC_DEFUN([LC_FUNC_MS_FLOCK_LOCK],
+[AC_MSG_CHECKING([if kernel has MS_FLOCK_LOCK sb flag])
LB_LINUX_TRY_COMPILE([
- #include <linux/mm.h>
+ #include <linux/fs.h>
],[
- page_mapped(NULL);
+ int flags = MS_FLOCK_LOCK;
],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_PAGE_MAPPED, 1, [page_mapped found])
+ AC_DEFINE(HAVE_MS_FLOCK_LOCK, 1,
+ [kernel has MS_FLOCK_LOCK flag])
+ AC_MSG_RESULT([yes])
],[
- AC_MSG_RESULT([no])
+ AC_MSG_RESULT([no])
])
])
-AC_DEFUN([LC_STRUCT_FILE_OPS_UNLOCKED_IOCTL],
-[AC_MSG_CHECKING([if struct file_operations has an unlocked_ioctl field])
+#
+# LC_FUNC_HAVE_CAN_SLEEP_ARG
+#
+# 2.6.5 kernel has third arg can_sleep in fs/locks.c: flock_lock_file_wait()
+#
+AC_DEFUN([LC_FUNC_HAVE_CAN_SLEEP_ARG],
+[AC_MSG_CHECKING([if kernel has third arg can_sleep in fs/locks.c: flock_lock_file_wait()])
LB_LINUX_TRY_COMPILE([
#include <linux/fs.h>
],[
- struct file_operations fops;
- &fops.unlocked_ioctl;
+ int cansleep;
+ struct file *file;
+ struct file_lock *file_lock;
+ flock_lock_file_wait(file, file_lock, cansleep);
],[
+ AC_DEFINE(HAVE_CAN_SLEEP_ARG, 1,
+ [kernel has third arg can_sleep in fs/locks.c: flock_lock_file_wait()])
AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_UNLOCKED_IOCTL, 1, [struct file_operations has an unlock ed_ioctl field])
],[
AC_MSG_RESULT([no])
])
])
+#
+# LC_FUNC_RELEASEPAGE_WITH_GFP
+#
+# 2.6.9 ->releasepage() takes a gfp_t arg
+# This kernel defines gfp_t (HAS_GFP_T) but doesn't use it for this function,
+# while others either don't have gfp_t or pass gfp_t as the parameter.
+#
+AC_DEFUN([LC_FUNC_RELEASEPAGE_WITH_GFP],
+[AC_MSG_CHECKING([if releasepage has a gfp_t parameter])
+RELEASEPAGE_WITH_GFP="$(grep -c 'releasepage.*gfp_t' $LINUX/include/linux/fs.h)"
+if test "$RELEASEPAGE_WITH_GFP" != 0 ; then
+ AC_DEFINE(HAVE_RELEASEPAGE_WITH_GFP, 1,
+ [releasepage with gfp_t parameter])
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+])
+
+#
+# between 2.6.5 - 2.6.22 filemap_populate is exported in some kernels
+#
AC_DEFUN([LC_FILEMAP_POPULATE],
[AC_MSG_CHECKING([for exported filemap_populate])
LB_LINUX_TRY_COMPILE([
])
])
+#
+# added in 2.6.15
+#
AC_DEFUN([LC_D_ADD_UNIQUE],
[AC_MSG_CHECKING([for d_add_unique])
LB_LINUX_TRY_COMPILE([
])
])
+#
+# added in 2.6.17
+#
AC_DEFUN([LC_BIT_SPINLOCK_H],
[LB_CHECK_FILE([$LINUX/include/linux/bit_spinlock.h],[
AC_MSG_CHECKING([if bit_spinlock.h can be compiled])
])
#
-# LC_POSIX_ACL_XATTR
-#
-# If we have xattr_acl.h
+# After 2.6.26 we no longer have xattr_acl.h
#
AC_DEFUN([LC_XATTR_ACL],
[LB_CHECK_FILE([$LINUX/include/linux/xattr_acl.h],[
[])
])
+
#
-# LC_LINUX_FIEMAP_H
-#
-# If we have fiemap.h
-# after 2.6.27 use fiemap.h in include/linux
+# added in 2.6.16
#
-AC_DEFUN([LC_LINUX_FIEMAP_H],
-[LB_CHECK_FILE([$LINUX/include/linux/fiemap.h],[
- AC_MSG_CHECKING([if fiemap.h can be compiled])
- LB_LINUX_TRY_COMPILE([
- #include <linux/fiemap.h>
- ],[],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_LINUX_FIEMAP_H, 1, [Kernel has fiemap.h])
- ],[
- AC_MSG_RESULT([no])
- ])
-],
-[])
-])
-
-
AC_DEFUN([LC_STRUCT_INTENT_FILE],
[AC_MSG_CHECKING([if struct open_intent has a file field])
LB_LINUX_TRY_COMPILE([
])
+#
+# After 2.6.16 the xattr_acl API is removed, and posix_acl is used instead
+#
AC_DEFUN([LC_POSIX_ACL_XATTR_H],
[LB_CHECK_FILE([$LINUX/include/linux/posix_acl_xattr.h],[
AC_MSG_CHECKING([if linux/posix_acl_xattr.h can be compiled])
])
])
+#
+# only for Lustre-patched kernels
+#
AC_DEFUN([LC_LUSTRE_VERSION_H],
[LB_CHECK_FILE([$LINUX/include/linux/lustre_version.h],[
rm -f "$LUSTRE/include/linux/lustre_version.h"
fi
])
-# LC_FUNC_MS_FLOCK_LOCK
-#
-# SLES9 kernel has MS_FLOCK_LOCK sb flag
-#
-AC_DEFUN([LC_FUNC_MS_FLOCK_LOCK],
-[AC_MSG_CHECKING([if kernel has MS_FLOCK_LOCK sb flag])
-LB_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
-],[
- int flags = MS_FLOCK_LOCK;
-],[
- AC_DEFINE(HAVE_MS_FLOCK_LOCK, 1,
- [kernel has MS_FLOCK_LOCK flag])
- AC_MSG_RESULT([yes])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
-#
-# LC_FUNC_HAVE_CAN_SLEEP_ARG
-#
-# SLES9 kernel has third arg can_sleep
-# in fs/locks.c: flock_lock_file_wait()
-#
-AC_DEFUN([LC_FUNC_HAVE_CAN_SLEEP_ARG],
-[AC_MSG_CHECKING([if kernel has third arg can_sleep in fs/locks.c: flock_lock_file_wait()])
-LB_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
-],[
- int cansleep;
- struct file *file;
- struct file_lock *file_lock;
- flock_lock_file_wait(file, file_lock, cansleep);
-],[
- AC_DEFINE(HAVE_CAN_SLEEP_ARG, 1,
- [kernel has third arg can_sleep in fs/locks.c: flock_lock_file_wait()])
- AC_MSG_RESULT([yes])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
-#
-# LC_FUNC_F_OP_FLOCK
-#
-# rhel4.2 kernel has f_op->flock field
-#
-AC_DEFUN([LC_FUNC_F_OP_FLOCK],
-[AC_MSG_CHECKING([if struct file_operations has flock field])
-LB_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
-],[
- struct file_operations ll_file_operations_flock;
- ll_file_operations_flock.flock = NULL;
-],[
- AC_DEFINE(HAVE_F_OP_FLOCK, 1,
- [struct file_operations has flock field])
- AC_MSG_RESULT([yes])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
-#
-# LC_TASK_PPTR
-#
-# task struct has p_pptr instead of parent
-#
-AC_DEFUN([LC_TASK_PPTR],
-[AC_MSG_CHECKING([task p_pptr found])
-LB_LINUX_TRY_COMPILE([
- #include <linux/sched.h>
-],[
- struct task_struct *p;
-
- p = p->p_pptr;
-],[
- AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE_TASK_PPTR, 1, [task p_pptr found])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
-#
-# LC_FUNC_F_OP_FLOCK
-#
-# rhel4.2 kernel has f_op->flock field
-#
-AC_DEFUN([LC_FUNC_F_OP_FLOCK],
-[AC_MSG_CHECKING([if struct file_operations has flock field])
-LB_LINUX_TRY_COMPILE([
- #include <linux/fs.h>
-],[
- struct file_operations ll_file_operations_flock;
- ll_file_operations_flock.flock = NULL;
-],[
- AC_DEFINE(HAVE_F_OP_FLOCK, 1,
- [struct file_operations has flock field])
- AC_MSG_RESULT([yes])
-],[
- AC_MSG_RESULT([no])
-])
-])
-
# LC_EXPORT_SYNCHRONIZE_RCU
# after 2.6.12 synchronize_rcu is preferred over synchronize_kernel
AC_DEFUN([LC_EXPORT_SYNCHRONIZE_RCU],
#
# LC_INVALIDATEPAGE_RETURN_INT
-# more 2.6 api changes. return type for the invalidatepage
-# address_space_operation is 'void' in new kernels but 'int' in old
+# 2.6.17 changes return type for invalidatepage to 'void' from 'int'
#
AC_DEFUN([LC_INVALIDATEPAGE_RETURN_INT],
[AC_MSG_CHECKING([invalidatepage has return int])
])
# LC_UMOUNTBEGIN_HAS_VFSMOUNT
-# more 2.6 API changes. 2.6.18 umount_begin has different parameters
+# after 2.6.18 umount_begin has different parameters
AC_DEFUN([LC_UMOUNTBEGIN_HAS_VFSMOUNT],
[AC_MSG_CHECKING([if umount_begin needs vfsmount parameter instead of super_block])
tmp_flags="$EXTRA_KCFLAGS"
])
])
-# RHEL5 in FS-cache patch rename PG_checked flag
-# into PG_fs_misc
+# RHEL5 in FS-cache patch rename PG_checked flag into PG_fs_misc
AC_DEFUN([LC_PG_FS_MISC],
[AC_MSG_CHECKING([kernel has PG_fs_misc])
LB_LINUX_TRY_COMPILE([
])
])
+#
+# LC_FUNC_GRAB_CACHE_PAGE_NOWAIT_GFP
+#
+# Check for our patched grab_cache_page_nowait_gfp() function
+# after 2.6.29 we can emulate this using add_to_page_cache_lru()
+#
+AC_DEFUN([LC_FUNC_GRAB_CACHE_PAGE_NOWAIT_GFP],
+[LB_CHECK_SYMBOL_EXPORT([grab_cache_page_nowait_gfp],
+[mm/filemap.c],[
+ AC_DEFINE(HAVE_GRAB_CACHE_PAGE_NOWAIT_GFP, 1,
+ [kernel exports grab_cache_page_nowait_gfp])
+ ],
+ [LB_CHECK_SYMBOL_EXPORT([add_to_page_cache_lru],
+ [mm/filemap.c],[
+ AC_DEFINE(HAVE_ADD_TO_PAGE_CACHE_LRU, 1,
+ [kernel exports add_to_page_cache_lru])
+ ],[
+ ])
+ ])
+])
# ~2.6.12 merge patch from oracle to convert tree_lock from spinlock to rwlock
AC_DEFUN([LC_RW_TREE_LOCK],
])
#
-# check for FS_RENAME_DOES_D_MOVE flag
+# 2.6.19 check for FS_RENAME_DOES_D_MOVE flag
#
AC_DEFUN([LC_FS_RENAME_DOES_D_MOVE],
[AC_MSG_CHECKING([if kernel has FS_RENAME_DOES_D_MOVE flag])
])
])
-# 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)
+# 2.6.23 has new shrinker API
+AC_DEFUN([LC_REGISTER_SHRINKER],
+[LB_CHECK_SYMBOL_EXPORT([register_shrinker],
+[mm/vmscan.c],[
+ AC_DEFINE(HAVE_REGISTER_SHRINKER, 1,
+ [kernel exports register_shrinker])
],[
- AC_MSG_ERROR([Lustre requires that Linux is configured with at least a 8KB stack.])
])
])
#
+# LC_LINUX_FIEMAP_H
+#
+# If we have fiemap.h
+# after 2.6.27 use fiemap.h in include/linux
+#
+AC_DEFUN([LC_LINUX_FIEMAP_H],
+[LB_CHECK_FILE([$LINUX/include/linux/fiemap.h],[
+ AC_MSG_CHECKING([if fiemap.h can be compiled])
+ LB_LINUX_TRY_COMPILE([
+ #include <linux/fiemap.h>
+ ],[],[
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_LINUX_FIEMAP_H, 1, [Kernel has fiemap.h])
+ ],[
+ AC_MSG_RESULT([no])
+ ])
+],
+[])
+])
+
+#
# LC_PROG_LINUX
#
# Lustre linux kernel checks
[LC_LUSTRE_VERSION_H
if test x$enable_server = xyes ; then
AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+ LC_FUNC_DEV_SET_RDONLY
LC_STACK_SIZE
LC_CONFIG_BACKINGFS
fi
LC_EXPORT_NODE_TO_CPUMASK
LC_FUNC_RELEASEPAGE_WITH_INT
- LC_HEADER_MM_INLINE
- LC_STRUCT_INODE
- LC_FUNC_REGISTER_CACHE
LC_FUNC_GRAB_CACHE_PAGE_NOWAIT_GFP
- LC_FUNC_DEV_SET_RDONLY
- LC_FUNC_FILEMAP_FDATAWRITE
LC_STRUCT_STATFS
- LC_FUNC_PAGE_MAPPED
- LC_STRUCT_FILE_OPS_UNLOCKED_IOCTL
LC_FILEMAP_POPULATE
LC_D_ADD_UNIQUE
LC_BIT_SPINLOCK_H
LC_CONFIG_GSS
LC_FUNC_MS_FLOCK_LOCK
LC_FUNC_HAVE_CAN_SLEEP_ARG
- LC_FUNC_F_OP_FLOCK
LC_QUOTA_READ
LC_COOKIE_FOLLOW_LINK
LC_FUNC_RCU