__add_wait_queue_exclusive, [
#include <linux/wait.h>
],[
- wait_queue_head_t queue;
- wait_queue_t wait;
+ wait_queue_head_t queue = { };
+ wait_queue_t wait = { };
__add_wait_queue_exclusive(&queue, &wait);
],[
#include <linux/spinlock.h>
#include <linux/fs_struct.h>
],[
- ((struct fs_struct *)0)->lock = (rwlock_t){ 0 };
+ struct fs_struct fss = { };
+ rwlock_t rwl = { };
+
+ fss.lock = rwl;
],[
AC_DEFINE(HAVE_FS_STRUCT_RWLOCK, 1, [fs_struct.lock use rwlock])
])
file_system_type_mount, [
#include <linux/fs.h>
],[
- struct file_system_type fst;
- void *i = (void *) fst.mount;
+ struct file_system_type fst = { };
+ void *mount;
+
+ mount = (void *)fst.mount;
],[
AC_DEFINE(HAVE_FSTYPE_MOUNT, 1,
[struct file_system_type has mount field])
dirty_inode_super_operation_flag, [
#include <linux/fs.h>
],[
- struct inode *inode;
+ struct inode *inode = NULL;
inode->i_sb->s_op->dirty_inode(NULL, 0);
],[
AC_DEFINE(HAVE_DIRTY_INODE_HAS_FLAG, 1,
#include <linux/migrate_mode.h>
#endif
],[
- struct address_space_operations aops;
+ struct address_space_operations aops = { };
aops.migratepage(NULL, NULL, NULL, MIGRATE_ASYNC);
],[
AC_DEFINE(HAVE_MIGRATEPAGE_4ARGS, 1,
bio_end_sector, [
#include <linux/bio.h>
],[
- struct bio bio;
+ struct bio bio = { };
+ unsigned long long end;
- bio_end_sector(&bio);
+ end = bio_end_sector(&bio);
],[
AC_DEFINE(HAVE_BIO_END_SECTOR, 1,
[bio_end_sector is defined])
is_sxid, [
#include <linux/fs.h>
],[
- struct inode inode;
+ struct inode inode = { };
is_sxid(inode.i_mode);
],[
AC_DEFUN([LC_HAVE_PROJECT_QUOTA], [
LB_CHECK_COMPILE([if get_projid exists],
get_projid, [
+ struct inode;
#include <linux/quota.h>
],[
- struct dquot_operations ops;
+ struct dquot_operations ops = { };
ops.get_projid(NULL, NULL);
],[
#error "back to use readdir in kabi_extand mode"
#else
struct dir_context ctx;
+
ctx.pos = 0;
#endif
],[
# 3.11 need to access d_count to get dentry reference count
#
AC_DEFUN([LC_HAVE_DCOUNT], [
-LB_CHECK_COMPILE([if 'd_count' exist],
+LB_CHECK_COMPILE([if 'd_count' exists],
d_count, [
#include <linux/dcache.h>
],[
- struct dentry de;
- d_count(&de);
+ struct dentry de = { };
+ int count;
+
+ count = d_count(&de);
],[
AC_DEFINE(HAVE_D_COUNT, 1,
[d_count exist])
#include <linux/bio.h>
],[
struct bvec_iter iter;
+
iter.bi_bvec_done = 0;
], [
AC_DEFINE(HAVE_BVEC_ITER, 1,
#include <asm/atomic.h>
#include <linux/bio.h>
],[
- struct bio bio;
+ struct bio bio = { };
int cnt;
cnt = atomic_read(&bio.bi_cnt);
], [
#include <linux/bio.h>
],[
struct bio bio;
- bio.bi_rw;
+
+ bio.bi_rw = 0;
], [
AC_DEFINE(HAVE_BI_RW, 1,
[struct bio has bi_rw])
direct_io_iter, [
#include <linux/fs.h>
],[
- struct address_space_operations ops;
+ struct address_space_operations ops = { };
struct iov_iter *iter = NULL;
loff_t offset = 0;
]) # LC_HAVE_FILE_OPERATIONS_READ_WRITE_ITER
#
+# LC_HAVE_INTERVAL_BLK_INTEGRITY
+#
+# 3.17 replace sector_size with interval in struct blk_integrity
+#
+AC_DEFUN([LC_HAVE_INTERVAL_BLK_INTEGRITY], [
+LB_CHECK_COMPILE([if 'blk_integrity.interval' exist],
+interval_blk_integrity, [
+ #include <linux/blkdev.h>
+],[
+ ((struct blk_integrity *)0)->interval = 0;
+],[
+ AC_DEFINE(HAVE_INTERVAL_BLK_INTEGRITY, 1,
+ [blk_integrity.interval exist])
+])
+]) # LC_HAVE_INTERVAL_BLK_INTEGRITY
+
+#
# LC_KEY_MATCH_DATA
#
# 3.17 replaces key_type::match with match_preparse
#include <linux/key-type.h>
],[
struct key_match_data data;
+
+ data.raw_data = NULL;
],[
AC_DEFINE(HAVE_KEY_MATCH_DATA, 1,
[struct key_match_data exist])
ki_nbytes, [
#include <linux/fs.h>
],[
- struct kiocb iocb;
+ struct kiocb iocb = { };
iocb.ki_nbytes = 0;
],[
]) # LC_BIO_ENDIO_USES_ONE_ARG
#
+# LC_HAVE_INTERVAL_EXP_BLK_INTEGRITY
+#
+# 4.3 replace interval with interval_exp in 'struct blk_integrity'
+# 'struct blk_integrity_profile' is also added in this version,
+# thus use this to determine whether 'struct blk_integrity' has profile
+#
+AC_DEFUN([LC_HAVE_INTERVAL_EXP_BLK_INTEGRITY], [
+LB_CHECK_COMPILE([if 'blk_integrity.interval_exp' exist],
+blk_integrity_interval_exp, [
+ #include <linux/blkdev.h>
+],[
+ ((struct blk_integrity *)0)->interval_exp = 0;
+],[
+ AC_DEFINE(HAVE_INTERVAL_EXP_BLK_INTEGRITY, 1,
+ [blk_integrity.interval_exp exist])
+])
+]) # LC_HAVE_INTERVAL_EXP_BLK_INTEGRITY
+
+#
# LC_HAVE_LOOP_CTL_GET_FREE
#
# 4.x kernel have moved userspace APIs to
key_payload_data_array, [
#include <linux/key.h>
],[
- ((struct key *)0)->payload.data[0] = NULL;
+ struct key key = { };
+
+ key.payload.data[0] = NULL;
],[
AC_DEFINE(HAVE_KEY_PAYLOAD_DATA_ARRAY, 1, [payload.data is an array])
])
direct_io_2args, [
#include <linux/fs.h>
],[
- struct address_space_operations ops;
+ struct address_space_operations ops = { };
struct iov_iter *iter = NULL;
struct kiocb *iocb = NULL;
int rc;
+
rc = ops.direct_IO(iocb, iter);
],[
AC_DEFINE(HAVE_DIRECTIO_2ARGS, 1,
],[
struct kiocb *iocb = NULL;
ssize_t rc;
+
rc = generic_write_sync(iocb, 0);
],[
AC_DEFINE(HAVE_GENERIC_WRITE_SYNC_2ARGS, 1,
]) # LC_GENERIC_WRITE_SYNC_2ARGS
#
+# LC_FOPS_ITERATE_SHARED
+#
+# 4.7 commit ae05327a00fd47c34dfe25294b359a3f3fef96e8
+# ext4: switch to ->iterate_shared()
+# this replaces ext4_dir_operations iterate with iterate_shared.
+# dir_relaxed_shared() was also added in this commit, so we can
+# use that function to verify that the ext4_dir_operations is using
+# iterate_shared.
+#
+AC_DEFUN([LC_FOPS_ITERATE_SHARED], [
+LB_CHECK_COMPILE([if ext4_dir_operations uses iterate_shared],
+iterate_shared, [
+ #include <linux/fs.h>
+],[
+ ((struct file_operations *)0)->iterate_shared(NULL, NULL);
+ dir_relax_shared(NULL);
+],[
+ AC_DEFINE(HAVE_ITERATE_SHARED, 1,
+ ['iterate_shared' is available])
+])
+]) # LC_FOPS_ITERATE_SHARED
+
+#
# LC_HAVE_POSIX_ACL_VALID_USER_NS
#
# 4.8 posix_acl_valid takes struct user_namespace
]) # LC_SUPER_SETUP_BDI_NAME
#
+# LC_BI_STATUS
+#
+# 4.12 replace bi_error to bi_status
+#
+AC_DEFUN([LC_BI_STATUS], [
+LB_CHECK_COMPILE([if 'bi_status' exist],
+bi_status, [
+ #include <linux/blk_types.h>
+],[
+ ((struct bio *)0)->bi_status = 0;
+],[
+ AC_DEFINE(HAVE_BI_STATUS, 1,
+ ['bi_status' is available])
+])
+]) # LC_BI_STATUS
+
+#
+# LC_BIO_INTEGRITY_ENABLED
+#
+# 4.13 removed bio_integrity_enabled
+#
+AC_DEFUN([LC_BIO_INTEGRITY_ENABLED], [
+LB_CHECK_COMPILE([if 'bio_integrity_enabled' exist],
+bio_integrity_enabled, [
+ #include <linux/bio.h>
+],[
+ bio_integrity_enabled(NULL);
+],[
+ AC_DEFINE(HAVE_BIO_INTEGRITY_ENABLED, 1,
+ ['bio_integrity_enabled' is available])
+])
+]) # LC_BIO_INTEGRITY_ENABLED
+
+#
+# LC_PAGEVEC_INIT_ONE_PARAM
+#
+# 4.14 pagevec_init takes one parameter
+#
+AC_DEFUN([LC_PAGEVEC_INIT_ONE_PARAM], [
+LB_CHECK_COMPILE([if 'pagevec_init' takes one parameter],
+pagevec_init, [
+ #include <linux/pagevec.h>
+],[
+ pagevec_init(NULL);
+],[
+ AC_DEFINE(HAVE_PAGEVEC_INIT_ONE_PARAM, 1,
+ ['pagevec_init' takes one parameter])
+])
+]) # LC_PAGEVEC_INIT_ONE_PARAM
+
+#
+# LC_BI_BDEV
+#
+# 4.14 replaced bi_bdev to bi_disk
+#
+AC_DEFUN([LC_BI_BDEV], [
+LB_CHECK_COMPILE([if 'bi_bdev' exist],
+bi_bdev, [
+ #include <linux/bio.h>
+],[
+ ((struct bio *)0)->bi_bdev = NULL;
+],[
+ AC_DEFINE(HAVE_BI_BDEV, 1,
+ ['bi_bdev' is available])
+])
+]) # LC_BI_BDEV
+
+
+#
# LC_PROG_LINUX
#
# Lustre linux kernel checks
LC_HAVE_FILE_OPERATIONS_READ_WRITE_ITER
# 3.17
+ LC_HAVE_INTERVAL_BLK_INTEGRITY
LC_KEY_MATCH_DATA
# 3.18
LC_SYMLINK_OPS_USE_NAMEIDATA
# 4.3
+ LC_HAVE_INTERVAL_EXP_BLK_INTEGRITY
LC_HAVE_CACHE_HEAD_HLIST
LC_HAVE_XATTR_HANDLER_SIMPLIFIED
# 4.7
LC_DIRECTIO_2ARGS
LC_GENERIC_WRITE_SYNC_2ARGS
+ LC_FOPS_ITERATE_SHARED
# 4.8
LC_HAVE_POSIX_ACL_VALID_USER_NS
# 4.12
LC_CURRENT_TIME
LC_SUPER_SETUP_BDI_NAME
+ LC_BI_STATUS
+
+ # 4.13
+ LC_BIO_INTEGRITY_ENABLED
+
+ # 4.14
+ LC_PAGEVEC_INIT_ONE_PARAM
+ LC_BI_BDEV
#
AS_IF([test "x$enable_server" != xno], [
lustre/fld/autoMakefile
lustre/obdclass/Makefile
lustre/obdclass/autoMakefile
-lustre/obdclass/linux/Makefile
lustre/obdecho/Makefile
lustre/obdecho/autoMakefile
lustre/ofd/Makefile