Whamcloud - gitweb
LU-1994 llite: atomic_open support
[fs/lustre-release.git] / lustre / autoconf / lustre-core.m4
index bee849c..4cc4bbf 100644 (file)
@@ -1239,6 +1239,7 @@ AC_DEFUN([LC_EXPORT_CPUMASK_OF_NODE],
                                              the kernel])]) # x86_64
          ])
 
+
 # 2.6.31 replaces blk_queue_hardsect_size by blk_queue_logical_block_size function
 AC_DEFUN([LC_BLK_QUEUE_LOG_BLK_SIZE],
 [AC_MSG_CHECKING([if blk_queue_logical_block_size is defined])
@@ -1350,7 +1351,7 @@ LB_LINUX_TRY_COMPILE([
 ],[
         AC_MSG_RESULT(no)
 ])
-])  
+])
 
 # 2.6.32 removes blk_queue_max_sectors and add blk_queue_max_hw_sectors
 # check blk_queue_max_sectors and use it until disappear.
@@ -1713,6 +1714,18 @@ EXTRA_KCFLAGS="$tmp_flags"
 ])
 
 #
+# 2.6.38 export simple_setattr
+#
+AC_DEFUN([LC_EXPORT_SIMPLE_SETATTR],
+[LB_CHECK_SYMBOL_EXPORT([simple_setattr],
+[fs/libfs.c],[
+AC_DEFINE(HAVE_SIMPLE_SETATTR, 1,
+            [simple_setattr is exported by the kernel])
+],[
+])
+])
+
+#
 # 2.6.39 remove unplug_fn from request_queue.
 #
 AC_DEFUN([LC_REQUEST_QUEUE_UNPLUG_FN],
@@ -1782,14 +1795,135 @@ LB_LINUX_TRY_COMPILE([
 ])
 
 #
-# 2.6.38 export simple_setattr
+# 3.1 renames lock-manager ops(lock_manager_operations) from fl_xxx to lm_xxx
+# see kernel commit 8fb47a4fbf858a164e973b8ea8ef5e83e61f2e50
 #
-AC_DEFUN([LC_EXPORT_SIMPLE_SETATTR],
-[LB_CHECK_SYMBOL_EXPORT([simple_setattr],
-[fs/libfs.c],[
-AC_DEFINE(HAVE_SIMPLE_SETATTR, 1,
-            [simple_setattr is exported by the kernel])
+AC_DEFUN([LC_LM_XXX_LOCK_MANAGER_OPS],
+[AC_MSG_CHECKING([if lock-manager ops renamed to lm_xxx])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       struct lock_manager_operations lm_ops;
+       lm_ops.lm_compare_owner = NULL;
+],[
+       AC_DEFINE(HAVE_LM_XXX_LOCK_MANAGER_OPS, 1,
+                 [lock-manager ops renamed to lm_xxx])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# 3.1 kills inode->i_alloc_sem, use i_dio_count and inode_dio_wait/
+#     inode_dio_done instead.
+# see kernel commit bd5fe6c5eb9c548d7f07fe8f89a150bb6705e8e3
+#
+AC_DEFUN([LC_INODE_DIO_WAIT],
+[AC_MSG_CHECKING([if inode->i_alloc_sem is killed and use inode_dio_wait/done.])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       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])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# 3.1 adds get_acl method to inode_operations to read ACL from disk.
+# see kernel commit 4e34e719e457f2e031297175410fc0bd4016a085
+#
+AC_DEFUN([LC_IOP_GET_ACL],
+[AC_MSG_CHECKING([inode_operations has .get_acl member function])
+LB_LINUX_TRY_COMPILE([
+        #include <linux/fs.h>
+],[
+        struct inode_operations iop;
+        iop.get_acl = NULL;
+],[
+        AC_DEFINE(HAVE_IOP_GET_ACL, 1,
+                  [inode_operations has .get_acl member function])
+        AC_MSG_RESULT([yes])
+],[
+        AC_MSG_RESULT([no])
+])
+])
+
+#
+# 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 <linux/fs.h>
+       #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],
+       [LB_CHECK_SYMBOL_EXPORT([generic_file_llseek_size],
+       [fs/read_write.c],
+        [AC_DEFINE(HAVE_FILE_LLSEEK_SIZE, 1,
+                  [generic_file_llseek_size is exported by the kernel])])
+])
+
+#
+# 3.2 request_queue.make_request_fn defined as function returns with void
+# see kernel commit 5a7bbad27a410350e64a2d7f5ec18fc73836c14f
+#
+AC_DEFUN([LC_HAVE_VOID_MAKE_REQUEST_FN],
+[AC_MSG_CHECKING([if request_queue.make_request_fn returns void but not int])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/blkdev.h>
+],[
+       int ret;
+       make_request_fn         *mrf;
+       ret = mrf(NULL, NULL);
 ],[
+       AC_MSG_RESULT([no])
+],[
+       AC_DEFINE(HAVE_VOID_MAKE_REQUEST_FN, 1,
+                 [request_queue.make_request_fn returns void but not int])
+       AC_MSG_RESULT([yes])
+])
+])
+
+#
+# 3.2 protects inode->i_nlink from direct modification
+# see kernel commit a78ef704a8dd430225955f0709b22d4a6ba21deb
+# at the same time adds set_nlink(), so checks set_nlink() for it.
+#
+AC_DEFUN([LC_HAVE_PROTECT_I_NLINK],
+[AC_MSG_CHECKING([if inode->i_nlink is protected from direct modification])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       struct inode i;
+       set_nlink(&i, 1);
+],[
+       AC_DEFINE(HAVE_PROTECT_I_NLINK, 1,
+                 [inode->i_nlink is protected from direct modification])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
 ])
 ])
 
@@ -1832,20 +1966,229 @@ LB_LINUX_TRY_COMPILE([
 ])
 
 #
-# 3.1.1 has ext4_blocks_for_truncate
+# 3.3 switchs super_operations to use dentry as parameter (but not vfsmount)
+# see kernel commit 34c80b1d93e6e20ca9dea0baf583a5b5510d92d4
 #
-AC_DEFUN([LC_BLOCKS_FOR_TRUNCATE],
-[AC_MSG_CHECKING([if kernel has ext4_blocks_for_truncate])
+AC_DEFUN([LC_SUPEROPS_USE_DENTRY],
+[AC_MSG_CHECKING([if super_operations use dentry as parameter])
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
 LB_LINUX_TRY_COMPILE([
        #include <linux/fs.h>
-       #include "$LINUX/fs/ext4/ext4_jbd2.h"
-       #include "$LINUX/fs/ext4/truncate.h"
+       int show_options(struct seq_file *seq, struct dentry *root){
+               return 0;
+       }
 ],[
-       ext4_blocks_for_truncate(NULL);
+       struct super_operations ops;
+       ops.show_options = show_options;
 ],[
+       AC_DEFINE(HAVE_SUPEROPS_USE_DENTRY, 1,
+                 [super_operations use dentry as parameter])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+])
+
+#
+# 3.3 switchs inode_operations to use umode_t as parameter (but not int)
+# see kernel commit 1a67aafb5f72a436ca044293309fa7e6351d6a35
+#
+AC_DEFUN([LC_INODEOPS_USE_UMODE_T],
+[AC_MSG_CHECKING([if inode_operations use umode_t as parameter])
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+       #include <linux/types.h>
+       int my_mknod(struct inode *dir, struct dentry *dchild,
+                    umode_t mode, dev_t dev)
+       {
+               return 0;
+       }
+],[
+       struct inode_operations ops;
+       ops.mknod = my_mknod;
+],[
+       AC_DEFINE(HAVE_INODEOPS_USE_UMODE_T, 1,
+                 [inode_operations use umode_t as parameter])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+])
+
+# 3.4 kmap_atomic removes second argument
+# see kernel commit 1ec9c5ddc17aa398f05646abfcbaf315b544e62f
+#
+AC_DEFUN([LC_KMAP_ATOMIC_HAS_1ARG],
+[AC_MSG_CHECKING([if kmap_atomic has only 1 argument])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/highmem.h>
+],[
+       kmap_atomic(NULL);
+],[
+       AC_DEFINE(HAVE_KMAP_ATOMIC_HAS_1ARG, 1,
+                 [have kmap_atomic has only 1 argument])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# 3.4 switchs touch_atime to struct path
+# see kernel commit 68ac1234fb949b66941d94dce4157742799fc581
+#
+AC_DEFUN([LC_TOUCH_ATIME_1ARG],
+[AC_MSG_CHECKING([if touch_atime use one argument])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       touch_atime((struct path *)NULL);
+],[
+       AC_DEFINE(HAVE_TOUCH_ATIME_1ARG, 1,
+                 [touch_atime use one argument])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# 3.4 converts d_alloc_root to d_make_root
+# see kernel commit 32991ab305ace7017c62f8eecbe5eb36dc32e13b
+#
+AC_DEFUN([LC_HAVE_D_MAKE_ROOT],
+[AC_MSG_CHECKING([if have d_make_root])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       d_make_root((struct inode *)NULL);
+],[
+       AC_DEFINE(HAVE_D_MAKE_ROOT, 1,
+                 [have d_make_root])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# 3.5 renames end_writeback() back to clear_inode()...
+# see kernel commit dbd5768f87ff6fb0a4fe09c4d7b6c4a24de99430
+#
+AC_DEFUN([LC_HAVE_CLEAR_INODE],
+[AC_MSG_CHECKING([if have clear_inode])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       clear_inode((struct inode *)NULL);
+],[
+       AC_DEFINE(HAVE_CLEAR_INODE, 1,
+                 [have clear_inode])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# 3.5 encode_fh has parent inode passed in directly
+# see kernel commit b0b0382b
+#
+AC_DEFUN([LC_HAVE_ENCODE_FH_PARENT],
+[AC_MSG_CHECKING([if encode_fh have parent inode as parameter])
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_LINUX_TRY_COMPILE([
+       #include <linux/exportfs.h>
+       #include <linux/fs.h>
+       #include <linux/types.h>
+       int ll_encode_fh(struct inode *i, __u32 *a, int *b, struct inode *p)
+       {
+               return 0;
+       }
+],[
+       struct export_operations exp_op;
+       exp_op.encode_fh = ll_encode_fh;
+],[
+       AC_DEFINE(HAVE_ENCODE_FH_PARENT, 1,
+                 [have parent inode as parameter])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+])
+
+#
+# 3.6 switch i_dentry/d_alias from list to hlist
+#
+AC_DEFUN([LC_HAVE_DENTRY_D_ALIAS_HLIST],
+[AC_MSG_CHECKING([if i_dentry/d_alias uses hlist])
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+       #include <linux/list.h>
+],[
+       struct inode inode;
+       struct dentry dentry;
+       struct hlist_head head;
+       struct hlist_node node;
+       inode.i_dentry = head;
+       dentry.d_alias = node;
+],[
+       AC_DEFINE(HAVE_DENTRY_D_ALIAS_HLIST, 1,
+                 [have i_dentry/d_alias uses hlist])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+])
+
+#
+# 3.6 dentry_open uses struct path as first argument
+# see kernel commit 765927b2
+#
+AC_DEFUN([LC_DENTRY_OPEN_USE_PATH],
+[AC_MSG_CHECKING([if dentry_open uses struct path as first argument])
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+       #include <linux/path.h>
+],[
+       struct path path;
+       dentry_open(&path, 0, NULL);
+],[
+       AC_DEFINE(HAVE_DENTRY_OPEN_USE_PATH, 1,
+                 [dentry_open uses struct path as first argument])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+])
+
+#
+# 3.6 vfs adds iop->atomic_open
+#
+AC_DEFUN([LC_HAVE_IOP_ATOMIC_OPEN],
+[AC_MSG_CHECKING([if iop has atomic_open])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       struct inode_operations iop;
+       iop.atomic_open = NULL;
+],[
+       AC_DEFINE(HAVE_IOP_ATOMIC_OPEN, 1,
+                 [have iop atomic_open])
        AC_MSG_RESULT([yes])
-       AC_DEFINE(HAVE_BLOCKS_FOR_TRUNCATE, 1,
-                 [kernel has ext4_blocks_for_truncate])
 ],[
        AC_MSG_RESULT([no])
 ])
@@ -1950,8 +2293,8 @@ AC_DEFUN([LC_PROG_LINUX],
          # 2.6.29
          LC_SB_ANY_QUOTA_LOADED
 
-         # 2.6.30
-         LC_EXPORT_CPUMASK_OF_NODE
+        # 2.6.30
+        LC_EXPORT_CPUMASK_OF_NODE
 
          # 2.6.31
          LC_BLK_QUEUE_LOG_BLK_SIZE
@@ -1991,23 +2334,49 @@ AC_DEFUN([LC_PROG_LINUX],
 
          # 2.6.39
          LC_REQUEST_QUEUE_UNPLUG_FN
-       LC_HAVE_FSTYPE_MOUNT
+        LC_HAVE_FSTYPE_MOUNT
 
-       # 3.3
-       LC_HAVE_MIGRATE_HEADER
-       LC_MIGRATEPAGE_4ARGS
+        # 3.1
+        LC_LM_XXX_LOCK_MANAGER_OPS
+        LC_INODE_DIO_WAIT
+        LC_IOP_GET_ACL
+        LC_FILE_LLSEEK_SIZE
 
         # 3.1.1
         LC_BLOCKS_FOR_TRUNCATE
 
-         #
-         if test x$enable_server = xyes ; then
-             AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
-             LC_FUNC_DEV_SET_RDONLY
-             LC_STACK_SIZE
-             LC_QUOTA64
-             LC_QUOTA_CONFIG
-         fi
+        # 3.2
+        LC_HAVE_VOID_MAKE_REQUEST_FN
+        LC_HAVE_PROTECT_I_NLINK
+
+        # 3.3
+        LC_HAVE_MIGRATE_HEADER
+        LC_MIGRATEPAGE_4ARGS
+        LC_SUPEROPS_USE_DENTRY
+        LC_INODEOPS_USE_UMODE_T
+
+        # 3.4
+        LC_TOUCH_ATIME_1ARG
+        LC_HAVE_D_MAKE_ROOT
+        LC_KMAP_ATOMIC_HAS_1ARG
+
+        # 3.5
+        LC_HAVE_CLEAR_INODE
+        LC_HAVE_ENCODE_FH_PARENT
+
+        # 3.6
+        LC_HAVE_DENTRY_D_ALIAS_HLIST
+        LC_DENTRY_OPEN_USE_PATH
+        LC_HAVE_IOP_ATOMIC_OPEN
+
+        #
+        if test x$enable_server = xyes ; then
+               AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+               LC_FUNC_DEV_SET_RDONLY
+               LC_STACK_SIZE
+               LC_QUOTA64
+               LC_QUOTA_CONFIG
+        fi
 ])
 
 #
@@ -2414,7 +2783,7 @@ AC_ARG_ENABLE([pgstate-track],
 AC_MSG_CHECKING([whether to enable page state tracking])
 AC_MSG_RESULT([$enable_pgstat_track])
 if test x$enable_pgstat_track = xyes ; then
-        AC_DEFINE([LUSTRE_PAGESTATE_TRACKING], 1,
+        AC_DEFINE([CONFIG_DEBUG_PAGESTATE_TRACKING], 1,
                   [enable page state tracking code])
 fi
 
@@ -2493,12 +2862,8 @@ lustre/mdc/Makefile
 lustre/mdc/autoMakefile
 lustre/lmv/Makefile
 lustre/lmv/autoMakefile
-lustre/mds/Makefile
-lustre/mds/autoMakefile
 lustre/mdt/Makefile
 lustre/mdt/autoMakefile
-lustre/cmm/Makefile
-lustre/cmm/autoMakefile
 lustre/mdd/Makefile
 lustre/mdd/autoMakefile
 lustre/fld/Makefile
@@ -2522,6 +2887,7 @@ lustre/mgc/Makefile
 lustre/mgc/autoMakefile
 lustre/mgs/Makefile
 lustre/mgs/autoMakefile
+lustre/target/Makefile
 lustre/ptlrpc/Makefile
 lustre/ptlrpc/autoMakefile
 lustre/ptlrpc/gss/Makefile