X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fautoconf%2Flustre-core.m4;h=e8802dc81f32fe7c215437be4429d6cf407ed2b4;hp=ec50de06640ffdc54dacf2c06fabce578170e150;hb=84bcd1360516a4684a686d8e5f0b59b3ab231c6e;hpb=68db57a59c10583eb4bc1db99c0629c8a660b11a diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index ec50de0..e8802dc 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -82,6 +82,15 @@ AC_TRY_COMPILE([ ]) ]) +AC_DEFUN([LC_GLIBC_SUPPORT_FHANDLES], +[AC_CHECK_FUNCS([name_to_handle_at],[ + AC_DEFINE(HAVE_FHANDLE_GLIBC_SUPPORT, 1, + [file handle and related syscalls are supported]) +],[ + AC_MSG_WARN([file handle and related syscalls are not supported]) +]) +]) + # # LC_FUNC_DEV_SET_RDONLY # @@ -216,10 +225,10 @@ AC_DEFUN([LC_QUOTA_CONFIG], ]) ]) -# truncate_complete_page() was exported from RHEL5/SLES10, but not in SLES11 SP0 (2.6.27) +# truncate_complete_page() has never been exported from an upstream kernel # remove_from_page_cache() was exported between 2.6.35 and 2.6.38 # delete_from_page_cache() is exported from 2.6.39 -AC_DEFUN([LC_EXPORT_TRUNCATE_COMPLETE], +AC_DEFUN([LC_EXPORT_TRUNCATE_COMPLETE_PAGE], [LB_CHECK_SYMBOL_EXPORT([truncate_complete_page], [mm/truncate.c], [AC_DEFINE(HAVE_TRUNCATE_COMPLETE_PAGE, 1, @@ -235,26 +244,6 @@ AC_DEFUN([LC_EXPORT_TRUNCATE_COMPLETE], ]) # -# 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]) - LB_LINUX_TRY_COMPILE([ - #include - #include - #include - ],[],[ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_BIT_SPINLOCK_H, 1, [Kernel has bit_spinlock.h]) - ],[ - AC_MSG_RESULT([no]) - ]) -], -[]) -]) - -# # LC_CAPA_CRYPTO # AC_DEFUN([LC_CAPA_CRYPTO], @@ -277,40 +266,70 @@ dnl the AES symbol usually tied with arch, e.g. CRYPTO_AES_586 dnl FIXME AC_DEFUN([LC_CONFIG_RMTCLIENT], [LB_LINUX_CONFIG_IM([CRYPTO_AES],[],[ - AC_MSG_WARN([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. +]) ]) ]) # -# LC_CONFIG_GSS_KEYRING (default enabled, if gss is enabled) +# LC_CONFIG_GSS_KEYRING (default 'auto', tests for dependencies, if found, enables; only called if gss is enabled) # 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], [disable gss keyring backend])], - [],[enable_gss_keyring='yes']) + [],[enable_gss_keyring='auto']) AC_MSG_RESULT([$enable_gss_keyring]) if test x$enable_gss_keyring != xno; then - LB_LINUX_CONFIG_IM([KEYS],[], - [AC_MSG_ERROR([GSS keyring backend require that CONFIG_KEYS be enabled in your kernel.])]) + LB_LINUX_CONFIG_IM([KEYS],[], + [gss_keyring_conf_test='fail'; + AC_MSG_WARN([ + +GSS keyring backend require that CONFIG_KEYS be enabled in your kernel. +])]) + + AC_CHECK_LIB([keyutils], [keyctl_search], [], + [gss_keyring_conf_test='fail'; + AC_MSG_WARN([ + +libkeyutils is not found, which is required by gss keyring backend +])],) - AC_CHECK_LIB([keyutils], [keyctl_search], [], - [AC_MSG_ERROR([libkeyutils is not found, which is required by gss keyring backend])],) + if test x$gss_keyring_conf_test != xfail; then + AC_DEFINE([HAVE_GSS_KEYRING], [1], [Define this if you enable gss keyring backend]) + enable_gss_keyring='yes' + else + if test x$enable_gss_keyring == xyes; then + AC_MSG_ERROR([ + +Cannot enable gss_keyring. See above for details. +]) + else + AC_MSG_WARN([ - AC_DEFINE([HAVE_GSS_KEYRING], [1], - [Define this if you enable gss keyring backend]) +Cannot enable gss keyring. See above for details. +]) + fi + fi fi ]) AC_DEFUN([LC_CONFIG_SUNRPC], [LB_LINUX_CONFIG_IM([SUNRPC],[], - [AC_MSG_ERROR([kernel SUNRPC support is required by using GSS.])]) + [if test x$sunrpc_required == xyes; then + AC_MSG_ERROR([ + +kernel SUNRPC support is required by using GSS. +]) + fi]) ]) # -# LC_CONFIG_GSS (default disabled) +# LC_CONFIG_GSS (default 'auto' (tests for dependencies, if found, enables)) # # Build gss and related tools of Lustre. Currently both kernel and user space # parts are depend on linux platform. @@ -319,258 +338,61 @@ AC_DEFUN([LC_CONFIG_GSS], [AC_MSG_CHECKING([whether to enable gss/krb5 support]) AC_ARG_ENABLE([gss], [AC_HELP_STRING([--enable-gss], [enable gss/krb5 support])], - [],[enable_gss='no']) + [],[enable_gss='auto']) AC_MSG_RESULT([$enable_gss]) - if test x$enable_gss == xyes; then + if test x$enable_gss != xno; then 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],[], - [AC_MSG_WARN([kernel SHA1 support is recommended by using GSS.])]) - LB_LINUX_CONFIG_IM([CRYPTO_SHA256],[], - [AC_MSG_WARN([kernel SHA256 support is recommended by using GSS.])]) - LB_LINUX_CONFIG_IM([CRYPTO_SHA512],[], - [AC_MSG_WARN([kernel SHA512 support is recommended by using GSS.])]) - - AC_CHECK_LIB([gssapi], [gss_export_lucid_sec_context], - [GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi"], - [AC_CHECK_LIB([gssglue], [gss_export_lucid_sec_context], - [GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssglue"], - [AC_MSG_ERROR([libgssapi or libgssglue is not found, which is required by GSS.])])],) + sunrpc_required=$enable_gss + LC_CONFIG_SUNRPC + sunrpc_required=no + + LB_LINUX_CONFIG_IM([CRYPTO_MD5],[], + [AC_MSG_WARN([kernel MD5 support is recommended by using GSS.])]) + LB_LINUX_CONFIG_IM([CRYPTO_SHA1],[], + [AC_MSG_WARN([kernel SHA1 support is recommended by using GSS.])]) + LB_LINUX_CONFIG_IM([CRYPTO_SHA256],[], + [AC_MSG_WARN([kernel SHA256 support is recommended by using GSS.])]) + LB_LINUX_CONFIG_IM([CRYPTO_SHA512],[], + [AC_MSG_WARN([kernel SHA512 support is recommended by using GSS.])]) + + require_krb5=$enable_gss + AC_KERBEROS_V5 + require_krb5=no + + if test x$KRBDIR != x; then + 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'], + [if test x$enable_gss == xyes; then + AC_MSG_ERROR([ + +libgssapi or libgssglue is not found, which is required by GSS. +]) + else + AC_MSG_WARN([ + +libgssapi or libgssglue is not found, which is required by GSS. +]) + fi])],) + AC_SUBST(GSSAPI_LIBS) + fi - AC_SUBST(GSSAPI_LIBS) + if test x$gss_conf_test == xsuccess; then + AC_DEFINE([HAVE_GSS], [1], [Define this is if you enable gss]) + enable_gss='yes' + fi - AC_KERBEROS_V5 fi ]) -# 2.6.12 - -# ~2.6.12 merge patch from oracle to convert tree_lock from spinlock to rwlock -# yet tree_lock is converted from rwlock to spin_lock since v2.6.26 -AC_DEFUN([LC_RW_TREE_LOCK], -[AC_MSG_CHECKING([if kernel has tree_lock as rwlock]) -tmp_flags="$EXTRA_KCFLAGS" -EXTRA_KCFLAGS="-Werror" -LB_LINUX_TRY_COMPILE([ - #include -],[ - struct address_space a; - - write_lock(&a.tree_lock); -],[ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_RW_TREE_LOCK, 1, [kernel has tree_lock as rw_lock]) -],[ - AC_MSG_RESULT([no]) -]) -EXTRA_KCFLAGS="$tmp_flags" -]) - -#2.6.18 + RHEL5 (fc6) - -# -# LC_LINUX_FIEMAP_H -# -# fiemap.h is added since v2.6.28 -# RHEL5 2.6.18 has it, while SLES10 2.6.27 does not -# -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 - #include - ],[],[ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_LINUX_FIEMAP_H, 1, [Kernel has fiemap.h]) - ],[ - AC_MSG_RESULT([no]) - ]) -], -[]) -]) - -# raid5-zerocopy patch - -# -# LC_PAGE_CONSTANT -# -# In order to support raid5 zerocopy patch, we have to patch the kernel to make -# it support constant page, which means the page won't be modified during the -# IO. -# -AC_DEFUN([LC_PAGE_CONSTANT], -[AC_MSG_CHECKING([if kernel have PageConstant defined]) -LB_LINUX_TRY_COMPILE([ - #include - #include -],[ - #ifndef PG_constant - #error "Have no raid5 zcopy patch" - #endif -],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_PAGE_CONSTANT, 1, [kernel have PageConstant supported]) -],[ - AC_MSG_RESULT(no); -]) -]) - -# 2.6.22 - -# -# 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]) -LB_LINUX_TRY_COMPILE([ - #include -],[ - int v __attribute__ ((unused)); - v = FS_RENAME_DOES_D_MOVE; -],[ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_FS_RENAME_DOES_D_MOVE, 1, [kernel has FS_RENAME_DOES_D_MOVE flag]) -],[ - AC_MSG_RESULT([no]) -]) -]) - -# 2.6.23 - -# 2.6.23 have return type 'void' for unregister_blkdev -AC_DEFUN([LC_UNREGISTER_BLKDEV_RETURN_INT], -[AC_MSG_CHECKING([if unregister_blkdev return int]) -LB_LINUX_TRY_COMPILE([ - #include -],[ - int i __attribute__ ((unused)); - i = unregister_blkdev(0,NULL); -],[ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_UNREGISTER_BLKDEV_RETURN_INT, 1, - [unregister_blkdev return int]) -],[ - AC_MSG_RESULT([no]) -]) -]) - -# 2.6.23 add code to wait other users to complete before removing procfs entry -AC_DEFUN([LC_PROCFS_USERS], -[AC_MSG_CHECKING([if kernel has pde_users member in procfs entry struct]) -LB_LINUX_TRY_COMPILE([ - #include -],[ - struct proc_dir_entry pde; - - pde.pde_users = 0; -],[ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_PROCFS_USERS, 1, - [kernel has pde_users member in procfs entry struct]) -],[ - LB_LINUX_TRY_COMPILE([ - #include "$LINUX/fs/proc/internal.h" - ],[ - struct proc_dir_entry_aux pde_aux; - - pde_aux.pde_users = 0; - ],[ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_PROCFS_USERS, 1, - [kernel has pde_users member in proc_dir_entry_aux]) - ],[ - AC_MSG_RESULT([no]) - ]) -]) -]) - -# 2.6.24 - -# 2.6.24 has bio_endio with 2 args -AC_DEFUN([LC_BIO_ENDIO_2ARG], -[AC_MSG_CHECKING([if kernel has bio_endio with 2 args]) -LB_LINUX_TRY_COMPILE([ - #include -],[ - bio_endio(NULL, 0); -], [ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_BIO_ENDIO_2ARG, 1, - [kernel has bio_endio with 2 args]) -],[ - AC_MSG_RESULT([no]) -]) -]) - -# 2.6.24 removes long aged procfs entry -> deleted member -AC_DEFUN([LC_PROCFS_DELETED], -[AC_MSG_CHECKING([if kernel has deleted member in procfs entry struct]) -LB_LINUX_TRY_COMPILE([ - #include -],[ - struct proc_dir_entry pde; - - pde.deleted = sizeof(pde); -], [ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_PROCFS_DELETED, 1, - [kernel has deleted member in procfs entry struct]) -],[ - AC_MSG_RESULT([no]) -]) -]) - -# 2.6.26 - -# 2.6.26 isn't export set_fs_pwd and change paramter in fs struct -AC_DEFUN([LC_FS_STRUCT_USE_PATH], -[AC_MSG_CHECKING([fs_struct use path structure]) -LB_LINUX_TRY_COMPILE([ - #include - #include - #include -],[ - struct fs_struct fs; - - fs.pwd = *((struct path *)sizeof(fs)); -], [ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_FS_STRUCT_USE_PATH, 1, - [fs_struct use path structure]) -],[ - AC_MSG_RESULT([no]) -]) -]) - -# -# 2.6.27 -# - -# LC_SECURITY_PLUG # for SLES10 SP2 (2.6.27) -# check security plug in sles10 sp2 kernel -AC_DEFUN([LC_SECURITY_PLUG], -[AC_MSG_CHECKING([If kernel has security plug support]) -LB_LINUX_TRY_COMPILE([ - #include - #include -],[ - notify_change(NULL, NULL, NULL); -],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_SECURITY_PLUG, 1, - [SLES10 SP2 use extra parameter in vfs]) -],[ - AC_MSG_RESULT(no) -]) -]) - +# up to v2.6.27 had a 3 arg version (inode, mask, nameidata) +# v2.6.27->v2.6.37 had a 2 arg version (inode, mask) +# v2.6.37->v3.0 had a 3 arg version (inode, mask, nameidata) +# v3.1 onward have a 2 arg version (inode, mask) AC_DEFUN([LC_INODE_PERMISION_2ARGS], [AC_MSG_CHECKING([inode_operations->permission has two args]) LB_LINUX_TRY_COMPILE([ @@ -589,39 +411,19 @@ LB_LINUX_TRY_COMPILE([ ]) ]) -# 2.6.27 use 5th parameter in quota_on for remount. -AC_DEFUN([LC_QUOTA_ON_5ARGS], -[AC_MSG_CHECKING([quota_on needs 5 parameters]) -LB_LINUX_TRY_COMPILE([ - #include - #include -],[ - struct quotactl_ops *qop = NULL; - qop->quota_on(NULL, 0, 0, NULL, 0); -],[ - AC_DEFINE(HAVE_QUOTA_ON_5ARGS, 1, - [quota_on needs 5 paramters]) - AC_MSG_RESULT([yes]) -],[ - AC_MSG_RESULT([no]) -]) -]) - -# 2.6.27 use 3th parameter in quota_off for remount. -AC_DEFUN([LC_QUOTA_OFF_3ARGS], -[AC_MSG_CHECKING([quota_off needs 3 parameters]) +# 2.6.32 replaces 2 functions blk_queue_max_phys_segments and blk_queue_max_hw_segments by blk_queue_max_segments +AC_DEFUN([LC_BLK_QUEUE_MAX_SEGMENTS], +[AC_MSG_CHECKING([if blk_queue_max_segments is defined]) LB_LINUX_TRY_COMPILE([ - #include - #include + #include ],[ - struct quotactl_ops *qop = NULL; - qop->quota_off(NULL, 0, 0); + blk_queue_max_segments(NULL, 0); ],[ - AC_DEFINE(HAVE_QUOTA_OFF_3ARGS, 1, - [quota_off needs 3 paramters]) - AC_MSG_RESULT([yes]) + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_BLK_QUEUE_MAX_SEGMENTS, 1, + [blk_queue_max_segments is defined]) ],[ - AC_MSG_RESULT([no]) + AC_MSG_RESULT(no) ]) ]) @@ -634,14 +436,25 @@ LB_LINUX_TRY_COMPILE([ #include #include ],[ - struct quotactl_ops qops = {}; - struct fs_disk_quota fdq; - qops.set_dqblk(NULL, 0, 0, &fdq); + ((struct quotactl_ops *)0)->set_dqblk(NULL, 0, 0, (struct fs_disk_quota*)0); ],[ AC_DEFINE(HAVE_DQUOT_FS_DISK_QUOTA, 1, [quotactl_ops.set_dqblk takes struct fs_disk_quota]) AC_MSG_RESULT([yes]) ],[ AC_MSG_RESULT([no]) + AC_MSG_CHECKING([if quotactl_ops.set_dqblk takes struct kqid & fs_disk_quota]) + LB_LINUX_TRY_COMPILE([ + #include + #include + ],[ + ((struct quotactl_ops *)0)->set_dqblk((struct super_block*)0, *((struct kqid*)0), (struct fs_disk_quota*)0); + ],[ + AC_DEFINE(HAVE_DQUOT_FS_DISK_QUOTA, 1, [quotactl_ops.set_dqblk takes struct fs_disk_quota]) + AC_DEFINE(HAVE_DQUOT_KQID, 1, [quotactl_ops.set_dqblk takes struct kqid]) + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + ]) ]) EXTRA_KCFLAGS="$tmp_flags" ]) @@ -661,80 +474,6 @@ LB_LINUX_TRY_COMPILE([ ]) ]) -# LC_LOCK_MAP_ACQUIRE -# after 2.6.27 lock_map_acquire replaces lock_acquire -AC_DEFUN([LC_LOCK_MAP_ACQUIRE], -[AC_MSG_CHECKING([if lock_map_acquire is defined]) -LB_LINUX_TRY_COMPILE([ - #include -],[ - lock_map_acquire(NULL); -],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_LOCK_MAP_ACQUIRE, 1, - [lock_map_acquire is defined]) -],[ - AC_MSG_RESULT(no) -]) -]) - -# 2.6.27.15-2 sles11 - -# 2.6.27 sles11 remove the bi_hw_segments -AC_DEFUN([LC_BI_HW_SEGMENTS], -[AC_MSG_CHECKING([struct bio has a bi_hw_segments field]) -LB_LINUX_TRY_COMPILE([ - #include -],[ - struct bio io; - io.bi_hw_segments = sizeof(io); -],[ - AC_DEFINE(HAVE_BI_HW_SEGMENTS, 1, - [struct bio has a bi_hw_segments field]) - AC_MSG_RESULT([yes]) -],[ - AC_MSG_RESULT([no]) -]) -]) - -# -# 2.6.27 sles11 move the quotaio_v1{2}.h from include/linux to fs -# 2.6.32 move the quotaio_v1{2}.h from fs to fs/quota -AC_DEFUN([LC_HAVE_QUOTAIO_H], -[LB_CHECK_FILE([$LINUX/include/linux/quotaio_v2.h],[ - AC_DEFINE(HAVE_QUOTAIO_H, 1, - [kernel has include/linux/quotaio_v2.h]) -],[LB_CHECK_FILE([$LINUX/fs/quotaio_v2.h],[ - AC_DEFINE(HAVE_FS_QUOTAIO_H, 1, - [kernel has fs/quotaio_v1.h]) -],[LB_CHECK_FILE([$LINUX/fs/quota/quotaio_v2.h],[ - AC_DEFINE(HAVE_FS_QUOTA_QUOTAIO_H, 1, - [kernel has fs/quota/quotaio_v2.h]) -],[ - AC_MSG_RESULT([no]) -]) -]) -]) -]) - -# 2.6.32 - -# 2.6.32 replaces 2 functions blk_queue_max_phys_segments and blk_queue_max_hw_segments by blk_queue_max_segments -AC_DEFUN([LC_BLK_QUEUE_MAX_SEGMENTS], -[AC_MSG_CHECKING([if blk_queue_max_segments is defined]) -LB_LINUX_TRY_COMPILE([ - #include -],[ - blk_queue_max_segments(NULL, 0); -],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_BLK_QUEUE_MAX_SEGMENTS, 1, - [blk_queue_max_segments is defined]) -],[ - AC_MSG_RESULT(no) -]) -]) - # # LC_QUOTA64 # @@ -947,28 +686,6 @@ AC_DEFINE(HAVE_BLKDEV_GET_BY_DEV, 1, ]) # -# 2.6.38 use path as 4th parameter in quota_on. -# -AC_DEFUN([LC_QUOTA_ON_USE_PATH], -[AC_MSG_CHECKING([quota_on use path as parameter]) -tmp_flags="$EXTRA_KCFLAGS" -EXTRA_KCFLAGS="-Werror" -LB_LINUX_TRY_COMPILE([ - #include - #include -],[ - ((struct quotactl_ops *)0)->quota_on(NULL, 0, 0, ((struct path*)0)); -],[ - AC_DEFINE(HAVE_QUOTA_ON_USE_PATH, 1, - [quota_on use path as 4th paramter]) - AC_MSG_RESULT([yes]) -],[ - AC_MSG_RESULT([no]) -]) -EXTRA_KCFLAGS="$tmp_flags" -]) - -# # 2.6.38 export simple_setattr # AC_DEFUN([LC_EXPORT_SIMPLE_SETATTR], @@ -981,6 +698,24 @@ AC_DEFINE(HAVE_SIMPLE_SETATTR, 1, ]) # +# truncate callback removed since 2.6.39 +# +AC_DEFUN([LC_IOP_TRUNCATE], +[AC_MSG_CHECKING([inode_operations has .truncate member function]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + ((struct inode_operations *)0)->truncate(NULL); +],[ + AC_DEFINE(HAVE_INODEOPS_TRUNCATE, 1, + [inode_operations has .truncate member function]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) + +# # 2.6.39 remove unplug_fn from request_queue. # AC_DEFUN([LC_REQUEST_QUEUE_UNPLUG_FN], @@ -1018,6 +753,18 @@ LB_LINUX_TRY_COMPILE([ ]) # +# 2.6.39 The open_by_handle_at() and name_to_handle_at() system calls were +# added to Linux kernel 2.6.39. +# Check if client supports these functions +# +AC_DEFUN([LC_HAVE_FHANDLE_SYSCALLS], +[LB_LINUX_CONFIG_IM([FHANDLE],[ + AC_DEFINE(HAVE_FHANDLE_SYSCALLS, 1, + [kernel supports fhandles and related syscalls]) +],[]) +]) + +# # 3.0 dirty_inode() has a flag parameter # see kernel commit aa38572954ade525817fe88c54faebf85e5a61c0 # @@ -1131,26 +878,6 @@ LB_LINUX_TRY_COMPILE([ ]) # -# 3.1.1 has ext4_blocks_for_truncate -# -AC_DEFUN([LC_BLOCKS_FOR_TRUNCATE], -[AC_MSG_CHECKING([if kernel has ext4_blocks_for_truncate]) -LB_LINUX_TRY_COMPILE([ - #include - #include "$LINUX/fs/ext4/ext4_jbd2.h" - #include "$LINUX/fs/ext4/truncate.h" -],[ - ext4_blocks_for_truncate(NULL); -],[ - AC_MSG_RESULT([yes]) - AC_DEFINE(HAVE_BLOCKS_FOR_TRUNCATE, 1, - [kernel has ext4_blocks_for_truncate]) -],[ - AC_MSG_RESULT([no]) -]) -]) - -# # 3.1 introduced generic_file_llseek_size() # AC_DEFUN([LC_FILE_LLSEEK_SIZE], @@ -1314,18 +1041,18 @@ LB_LINUX_TRY_COMPILE([ ]) # -# 3.4 switchs touch_atime to struct path -# see kernel commit 68ac1234fb949b66941d94dce4157742799fc581 +# 3.4 converts d_alloc_root to d_make_root +# see kernel commit 32991ab305ace7017c62f8eecbe5eb36dc32e13b # -AC_DEFUN([LC_TOUCH_ATIME_1ARG], -[AC_MSG_CHECKING([if touch_atime use one argument]) +AC_DEFUN([LC_HAVE_D_MAKE_ROOT], +[AC_MSG_CHECKING([if have d_make_root]) LB_LINUX_TRY_COMPILE([ #include ],[ - touch_atime((struct path *)NULL); + d_make_root((struct inode *)NULL); ],[ - AC_DEFINE(HAVE_TOUCH_ATIME_1ARG, 1, - [touch_atime use one argument]) + AC_DEFINE(HAVE_D_MAKE_ROOT, 1, + [have d_make_root]) AC_MSG_RESULT([yes]) ],[ AC_MSG_RESULT([no]) @@ -1333,18 +1060,22 @@ LB_LINUX_TRY_COMPILE([ ]) # -# 3.4 converts d_alloc_root to d_make_root -# see kernel commit 32991ab305ace7017c62f8eecbe5eb36dc32e13b +# 3.4 cache_register/cache_unregister are removed +# see kernel commit 2c5f846747526e2b83c5f1b8e69016be0e2e87c0 +# Note, since 2.6.37 cache_register_net/cache_unregister_net +# are defined, but not exported. +# 3.3 cache_register_net/cache_unregister_net are +# exported and replacing cache_register/cache_unregister in 3.4 # -AC_DEFUN([LC_HAVE_D_MAKE_ROOT], -[AC_MSG_CHECKING([if have d_make_root]) +AC_DEFUN([LC_HAVE_CACHE_REGISTER], +[AC_MSG_CHECKING([if have cache_register]) LB_LINUX_TRY_COMPILE([ - #include + #include ],[ - d_make_root((struct inode *)NULL); + cache_register(NULL); ],[ - AC_DEFINE(HAVE_D_MAKE_ROOT, 1, - [have d_make_root]) + AC_DEFINE(HAVE_CACHE_REGISTER, 1, + [have cache_register]) AC_MSG_RESULT([yes]) ],[ AC_MSG_RESULT([no]) @@ -1505,6 +1236,39 @@ LB_LINUX_TRY_COMPILE([ ]) # +# 3.8 struct file has new member f_inode +# +AC_DEFUN([LC_HAVE_FILE_F_INODE], +[AC_MSG_CHECKING([if struct file has memeber f_inode]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + ((struct file *)0)->f_inode = NULL; +],[ + AC_DEFINE(HAVE_FILE_F_INODE, 1, + [struct file has memeber f_inode]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) + +AC_DEFUN([LC_HAVE_SUNRPC_UPCALL_HAS_3ARGS], +[AC_MSG_CHECKING([if sunrpc_cache_pipe_upcall takes 3 args]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + sunrpc_cache_pipe_upcall(NULL, NULL, NULL); +],[ + AC_DEFINE(HAVE_SUNRPC_UPCALL_HAS_3ARGS, 1, + [sunrpc_cache_pipe_upcall takes 3 args]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) + +# # 3.9 uses hlist_for_each_entry with 3 args # b67bfe0d42cac56c512dd5da4b1b347a23f4b70a # @@ -1528,64 +1292,171 @@ LB_LINUX_TRY_COMPILE([ ]) # -# LC_PROG_LINUX +# 3.10+ only supports procfs seq_files handling # -# Lustre linux kernel checks -# -AC_DEFUN([LC_PROG_LINUX], - [ - LC_CONFIG_PINGER - LC_CONFIG_CHECKSUM - LC_CONFIG_LIBLUSTRE_RECOVERY - LC_CONFIG_HEALTH_CHECK_WRITE - LC_CONFIG_LRU_RESIZE - LC_LLITE_LLOOP_MODULE +AC_DEFUN([LC_HAVE_ONLY_PROCFS_SEQ], +[AC_MSG_CHECKING([if procfs only supports using seq_files]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + ((struct proc_dir_entry *)0)->write_proc(NULL, NULL, 0, NULL); +],[ + AC_MSG_RESULT([no]) +],[ + AC_DEFINE(HAVE_ONLY_PROCFS_SEQ, 1, [only seq_files supported]) + AC_MSG_RESULT([yes]) +]) +]) - # RHEL4 patches - LC_EXPORT_TRUNCATE_COMPLETE +# 3.10 release for block device doesn't return int +AC_DEFUN([LC_BLKDEV_RELEASE_RETURN_INT], +[AC_MSG_CHECKING([if block_device_operations release returns int]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + struct block_device_operations fops; + int i __attribute__ ((unused)); - LC_BIT_SPINLOCK_H + i = fops.release(NULL,0); +],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_BLKDEV_RELEASE_RETURN_INT, 1, + [block device release returns int]) +],[ + AC_MSG_RESULT([no]) +]) +]) - LC_CAPA_CRYPTO - LC_CONFIG_RMTCLIENT - LC_CONFIG_GSS +# +# 3.11 invalidatepage requires the length of the range to invalidate +# +AC_DEFUN([LC_INVALIDATE_RANGE], +[AC_MSG_CHECKING([if address_space_operations.invalidatepage requires 3 arguments]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + struct address_space_operations a_ops; - # 2.6.12 - LC_RW_TREE_LOCK + a_ops.invalidatepage(NULL,0,0); +],[ + AC_DEFINE(HAVE_INVALIDATE_RANGE, 1, [address_space_operations.invalidatepage needs 3 arguments]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) - #2.6.18 + RHEL5 (fc6) - LC_LINUX_FIEMAP_H +# +# 3.11 readdir now takes the new struct dir_context +# +AC_DEFUN([LC_HAVE_DIR_CONTEXT], +[AC_MSG_CHECKING([if dir_context exist]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + struct dir_context ctx; - # raid5-zerocopy patch - LC_PAGE_CONSTANT + ctx.pos = 0; +],[ + AC_DEFINE(HAVE_DIR_CONTEXT, 1, [dir_context exist]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) - # 2.6.22 - LC_FS_RENAME_DOES_D_MOVE +# +# 3.11 dentry_operations.d_compare() taken 5 arguments. +# +AC_DEFUN([LC_D_COMPARE_5ARGS], +[AC_MSG_CHECKING([if d_compare taken 5 arguments]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + ((struct dentry_operations*)0)->d_compare(NULL,NULL,0,NULL,NULL); +],[ + AC_DEFINE(HAVE_D_COMPARE_5ARGS, 1, + [d_compare need 5 arguments]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) - # 2.6.23 - LC_UNREGISTER_BLKDEV_RETURN_INT - LC_PROCFS_USERS +# +# 3.11 need to access d_count to get dentry reference count +# +AC_DEFUN([LC_HAVE_DCOUNT], +[AC_MSG_CHECKING([if d_count exist]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + struct dentry de; - # 2.6.24 - LC_BIO_ENDIO_2ARG - LC_PROCFS_DELETED + d_count(&de); +],[ + AC_DEFINE(HAVE_D_COUNT, 1, [d_count exist]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) - # 2.6.26 - LC_FS_STRUCT_USE_PATH +# +# 3.12 truncate_pagecache without oldsize parameter +# +AC_DEFUN([LC_OLDSIZE_TRUNCATE_PAGECACHE], +[AC_MSG_CHECKING([if truncate_pagecache with old_size parameter]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + truncate_pagecache(NULL, 0, 0); +],[ + AC_DEFINE(HAVE_OLDSIZE_TRUNCATE_PAGECACHE, 1, [with oldsize]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) - # 2.6.27 - LC_SECURITY_PLUG # for SLES10 SP2 - LC_INODE_PERMISION_2ARGS - LC_QUOTA_ON_5ARGS - LC_QUOTA_OFF_3ARGS - LC_LOCK_MAP_ACQUIRE +# +# 3.12 ki_left removed from struct kiocb +# +AC_DEFUN([LC_KIOCB_KI_LEFT], +[AC_MSG_CHECKING([if struct kiocb with ki_left member]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + ((struct kiocb*)0)->ki_left = 0; +],[ + AC_DEFINE(HAVE_KIOCB_KI_LEFT, 1, [ki_left exist]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) - # 2.6.27.15-2 sles11 - LC_BI_HW_SEGMENTS - LC_HAVE_QUOTAIO_H +# +# LC_PROG_LINUX +# +# Lustre linux kernel checks +# +AC_DEFUN([LC_PROG_LINUX], + [ + LC_CONFIG_PINGER + LC_CONFIG_CHECKSUM + LC_CONFIG_LIBLUSTRE_RECOVERY + LC_CONFIG_HEALTH_CHECK_WRITE + LC_CONFIG_LRU_RESIZE + LC_LLITE_LLOOP_MODULE + + LC_GLIBC_SUPPORT_FHANDLES + LC_CAPA_CRYPTO + LC_CONFIG_RMTCLIENT + LC_CONFIG_GSS - # 2.6.32 - LC_BLK_QUEUE_MAX_SEGMENTS + # 2.6.32 + LC_BLK_QUEUE_MAX_SEGMENTS # 2.6.34 LC_HAVE_DQUOT_FS_DISK_QUOTA @@ -1594,6 +1465,7 @@ AC_DEFUN([LC_PROG_LINUX], # 2.6.35, 3.0.0 LC_FILE_FSYNC LC_EXPORT_SIMPLE_SETATTR + LC_EXPORT_TRUNCATE_COMPLETE_PAGE # 2.6.36 LC_FS_STRUCT_RWLOCK @@ -1605,15 +1477,16 @@ AC_DEFUN([LC_PROG_LINUX], # 2.6.38 LC_BLKDEV_GET_BY_DEV LC_GENERIC_PERMISSION - LC_QUOTA_ON_USE_PATH LC_DCACHE_LOCK LC_INODE_I_RCU LC_D_COMPARE_7ARGS LC_D_DELETE_CONST - # 2.6.39 - LC_REQUEST_QUEUE_UNPLUG_FN + # 2.6.39 + LC_REQUEST_QUEUE_UNPLUG_FN + LC_HAVE_FHANDLE_SYSCALLS LC_HAVE_FSTYPE_MOUNT + LC_IOP_TRUNCATE # 3.0 LC_DIRTY_INODE_WITH_FLAG @@ -1623,9 +1496,7 @@ AC_DEFUN([LC_PROG_LINUX], LC_INODE_DIO_WAIT LC_IOP_GET_ACL LC_FILE_LLSEEK_SIZE - - # 3.1.1 - LC_BLOCKS_FOR_TRUNCATE + LC_INODE_PERMISION_2ARGS # 3.2 LC_HAVE_VOID_MAKE_REQUEST_FN @@ -1636,9 +1507,9 @@ AC_DEFUN([LC_PROG_LINUX], LC_MIGRATEPAGE_4ARGS LC_SUPEROPS_USE_DENTRY LC_INODEOPS_USE_UMODE_T + LC_HAVE_CACHE_REGISTER # 3.4 - LC_TOUCH_ATIME_1ARG LC_HAVE_D_MAKE_ROOT LC_KMAP_ATOMIC_HAS_1ARG @@ -1653,14 +1524,31 @@ AC_DEFUN([LC_PROG_LINUX], LC_HAVE_IOP_ATOMIC_OPEN # 3.7 - LC_HAVE_POSIXACL_USER_NS + LC_HAVE_POSIXACL_USER_NS + + # 3.8 + LC_HAVE_FILE_F_INODE + LC_HAVE_SUNRPC_UPCALL_HAS_3ARGS # 3.9 LC_HAVE_HLIST_FOR_EACH_3ARG + # 3.10 + LC_HAVE_ONLY_PROCFS_SEQ + LC_BLKDEV_RELEASE_RETURN_INT + + # 3.11 + LC_INVALIDATE_RANGE + LC_HAVE_DIR_CONTEXT + LC_D_COMPARE_5ARGS + LC_HAVE_DCOUNT + + # 3.12 + LC_OLDSIZE_TRUNCATE_PAGECACHE + LC_KIOCB_KI_LEFT + # - if test x$enable_server = xyes ; then - AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server]) + if test x$enable_server != xno ; then LC_FUNC_DEV_SET_RDONLY LC_STACK_SIZE LC_QUOTA64 @@ -1669,24 +1557,18 @@ AC_DEFUN([LC_PROG_LINUX], ]) # -# LC_CONFIG_CLIENT_SERVER +# LC_CONFIG_CLIENT # -# Build client/server sides of Lustre +# Check whether to build the client side of Lustre # -AC_DEFUN([LC_CONFIG_CLIENT_SERVER], -[AC_MSG_CHECKING([whether to build Lustre server support]) -AC_ARG_ENABLE([server], - AC_HELP_STRING([--disable-server], - [disable Lustre server support]), - [],[enable_server='yes']) -AC_MSG_RESULT([$enable_server]) - -AC_MSG_CHECKING([whether to build Lustre client support]) +AC_DEFUN([LC_CONFIG_CLIENT], +[AC_MSG_CHECKING([whether to build Lustre client support]) AC_ARG_ENABLE([client], AC_HELP_STRING([--disable-client], [disable Lustre client support]), [],[enable_client='yes']) -AC_MSG_RESULT([$enable_client])]) +AC_MSG_RESULT([$enable_client]) +]) # # LC_CONFIG_LIBLUSTRE @@ -1723,22 +1605,6 @@ if test x$enable_liblustre_acl = xyes ; then AC_DEFINE(LIBLUSTRE_POSIX_ACL, 1, Liblustre Support ACL-enabled MDS) fi -# 2.6.29 blkdev_put has 2 arguments -AC_DEFUN([LC_BLKDEV_PUT_2ARGS], -[AC_MSG_CHECKING([blkdev_put needs 2 parameters]) -LB_LINUX_TRY_COMPILE([ - #include -],[ - blkdev_put(NULL, 0); -],[ - AC_DEFINE(HAVE_BLKDEV_PUT_2ARGS, 1, - [blkdev_put needs 2 paramters]) - AC_MSG_RESULT([yes]) -],[ - AC_MSG_RESULT([no]) -]) -]) - # # --enable-mpitest # @@ -1809,9 +1675,11 @@ AC_DEFUN([LC_QUOTA], [#check global LC_CONFIG_QUOTA #check for utils +if test x$enable_quota != xno -a x$enable_utils != xno; then AC_CHECK_HEADER(sys/quota.h, [AC_DEFINE(HAVE_SYS_QUOTA_H, 1, [Define to 1 if you have .])], [AC_MSG_ERROR([don't find in your system])]) +fi ]) # @@ -1832,6 +1700,23 @@ fi ]) # +# LC_CONFIG_NODEMAP_PROC_DEBUG +# +# enable nodemap proc file debugging +# +AC_DEFUN([LC_NODEMAP_PROC_DEBUG], +[AC_MSG_CHECKING([whether to enable nodemap proc debug]) +AC_ARG_ENABLE([nodemap_proc_debug], + AC_HELP_STRING([--enable-nodemap-proc-debug], + [enable nodemap proc debug]), + [],[enable_nodemap_proc_debug='no']) +AC_MSG_RESULT([$enable_nodemap_proc_debug]) +if test x$enable_nodemap_proc_debug != xno; then + AC_DEFINE(NODEMAP_PROC_DEBUG, 1, [enable nodemap proc debug support]) +fi +]) + +# # LC_LLITE_LLOOP_MODULE # lloop_llite.ko does not currently work with page sizes # of 64k or larger. @@ -1924,7 +1809,7 @@ AC_CHECK_FUNCS([inet_ntoa]) # libsysio/src/readlink.c LC_READLINK_SSIZE_T -# lvfs/prng.c - depends on linux/types.h from liblustre/dir.c +# libcfs prng.c - depends on linux/types.h from liblustre/dir.c AC_CHECK_HEADERS([linux/random.h], [], [], [#ifdef HAVE_LINUX_TYPES_H # include @@ -1942,9 +1827,14 @@ AC_CHECK_LIB([z], [ZLIB="-lz" AC_DEFINE([HAVE_ADLER], 1, [support alder32 checksum type])], - [AC_MSG_WARN([No zlib-devel package found, - unable to use adler32 checksum])])], - [AC_MSG_WARN([No zlib package found, unable to use adler32 checksum])] + [AC_MSG_WARN([ + +No zlib-devel package found, unable to use adler32 checksum +])])], + [AC_MSG_WARN([ + +No zlib package found, unable to use adler32 checksum +])] ) AC_SUBST(ZLIB) @@ -1955,11 +1845,14 @@ AC_CHECK_LIB([selinux], [SELINUX="-lselinux" AC_DEFINE([HAVE_SELINUX], 1, [support for selinux ])], - [AC_MSG_WARN([No selinux-devel package found, - unable to build selinux enabled - tools])])], - [AC_MSG_WARN([No selinux package found, unable to build selinux - enabled tools])] + [AC_MSG_WARN([ + +No selinux-devel package found, unable to build selinux enabled tools +])])], + [AC_MSG_WARN([ + +No selinux package found, unable to build selinux enabled tools +])] ) AC_SUBST(SELINUX) @@ -2012,10 +1905,6 @@ if test x$enable_pgstat_track = xyes ; then AC_DEFINE([CONFIG_DEBUG_PAGESTATE_TRACKING], 1, [enable page state tracking code]) fi - - #2.6.29 - LC_BLKDEV_PUT_2ARGS - ]) # @@ -2025,7 +1914,6 @@ fi # AC_DEFUN([LC_CONDITIONALS], [AM_CONDITIONAL(LIBLUSTRE, test x$enable_liblustre = xyes) -AM_CONDITIONAL(USE_QUILT, test x$QUILT != xno) AM_CONDITIONAL(LIBLUSTRE_TESTS, test x$enable_liblustre_tests = xyes) AM_CONDITIONAL(MPITESTS, test x$enable_mpitests = xyes, Build MPI Tests) AM_CONDITIONAL(CLIENT, test x$enable_client = xyes) @@ -2062,6 +1950,7 @@ lustre/kernel_patches/targets/2.6-rhel6.target 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/2.6-fc11.target lustre/kernel_patches/targets/2.6-fc12.target lustre/kernel_patches/targets/2.6-fc15.target @@ -2077,8 +1966,6 @@ lustre/llite/autoMakefile lustre/lclient/Makefile lustre/lov/Makefile lustre/lov/autoMakefile -lustre/lvfs/Makefile -lustre/lvfs/autoMakefile lustre/mdc/Makefile lustre/mdc/autoMakefile lustre/lmv/Makefile @@ -2087,6 +1974,8 @@ lustre/lfsck/Makefile lustre/lfsck/autoMakefile lustre/mdt/Makefile lustre/mdt/autoMakefile +lustre/nodemap/Makefile +lustre/nodemap/autoMakefile lustre/mdd/Makefile lustre/mdd/autoMakefile lustre/fld/Makefile