Whamcloud - gitweb
LU-812 ldiskfs: super_operations->dirty_inode now takes a flag
[fs/lustre-release.git] / lustre / autoconf / lustre-core.m4
index c47dbc4..601155c 100644 (file)
@@ -1114,6 +1114,42 @@ LB_LINUX_TRY_COMPILE([
 ])
 ])
 
+# 2.6.34 has quotactl_ops->[sg]et_dqblk that take struct fs_disk_quota
+AC_DEFUN([LC_HAVE_DQUOT_FS_DISK_QUOTA],
+tmp_flags="$EXTRA_KCFLAGS"
+EXTRA_KCFLAGS="-Werror"
+[AC_MSG_CHECKING([if quotactl_ops.set_dqblk takes struct fs_disk_quota])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+       #include <linux/quota.h>
+],[
+       struct quotactl_ops qops = {};
+       struct fs_disk_quota fdq;
+       qops.set_dqblk(NULL, 0, 0, &fdq);
+],[
+       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])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+])
+
+# 2.6.34 has renamed dquot options to dquot_*, check for dquot_suspend
+AC_DEFUN([LC_HAVE_DQUOT_SUSPEND],
+[AC_MSG_CHECKING([if dquot_suspend is defined])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/quotaops.h>
+],[
+       dquot_suspend(NULL, -1);
+],[
+       AC_DEFINE(HAVE_DQUOT_SUSPEND, 1, [dquot_suspend is defined])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
 # LC_LOCK_MAP_ACQUIRE
 # after 2.6.27 lock_map_acquire replaces lock_acquire
 AC_DEFUN([LC_LOCK_MAP_ACQUIRE],
@@ -1239,6 +1275,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 +1387,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.
@@ -1657,40 +1694,6 @@ AC_DEFINE(HAVE_BLKDEV_GET_BY_DEV, 1,
 ])
 
 #
-# 2.6.38 vfsmount.mnt_count doesn't use atomic_t
-#
-# 3.3 starts hiding vfsmount guts series (move from include/linux/mount.h to
-# fs/mount.h, see kernel commit 7d6fec45a5131918b51dcd76da52f2ec86a85be6)
-#
-AC_DEFUN([LC_ATOMIC_MNT_COUNT],
-[AC_MSG_CHECKING([if vfsmount guts is hidden, or vfsmount.mnt_count is atomic_t.])
-LB_LINUX_TRY_COMPILE([
-       #include <linux/fs.h>
-       #include <../fs/mount.h>
-],[
-       struct mount *mnt =  real_mount((struct vfsmount *)0);
-],[
-       AC_DEFINE(HAVE_HIDE_VFSMOUNT_GUTS, 1,
-                 [hide vfsmount guts in fs/mount.h])
-       AC_MSG_RESULT([yes, hide vfsmount guts in fs/mount.h])
-],[
-       LB_LINUX_TRY_COMPILE([
-               #include <asm/atomic.h>
-               #include <linux/fs.h>
-               #include <linux/mount.h>
-       ],[
-               ((struct vfsmount *)0)->mnt_count = ((atomic_t) { 0 });
-       ],[
-               AC_DEFINE(HAVE_ATOMIC_MNT_COUNT, 1,
-                       [vfsmount.mnt_count is atomic_t])
-               AC_MSG_RESULT([yes, vfsmount.mnt_count is atomic_t])
-       ],[
-               AC_MSG_RESULT([no])
-       ])
-])
-])
-
-#
 # 2.6.38 use path as 4th parameter in quota_on.
 #
 AC_DEFUN([LC_QUOTA_ON_USE_PATH],
@@ -1762,6 +1765,26 @@ LB_LINUX_TRY_COMPILE([
 ])
 
 #
+# 3.0 dirty_inode() has a flag parameter
+# see kernel commit aa38572954ade525817fe88c54faebf85e5a61c0
+#
+AC_DEFUN([LC_DIRTY_INODE_WITH_FLAG],
+[AC_MSG_CHECKING([if dirty_inode super_operation takes flag])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       struct inode *inode;
+       inode->i_sb->s_op->dirty_inode(NULL, 0);
+],[
+       AC_DEFINE(HAVE_DIRTY_INODE_HAS_FLAG, 1,
+                 [dirty_inode super_operation takes flag])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
 # 2.6.38 generic_permission taken 4 parameters.
 # in fact, it means rcu-walk aware permission bring.
 #
@@ -1875,6 +1898,16 @@ LB_LINUX_TRY_COMPILE([
 ])
 
 #
+# 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
 #
@@ -2085,6 +2118,121 @@ LB_LINUX_TRY_COMPILE([
 ])
 
 #
+# 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.5 has generic_file_llseek_size with 5 args
+AC_DEFUN([LC_FILE_LLSEEK_SIZE_5ARG],
+[AC_MSG_CHECKING([if kernel has generic_file_llseek_size with 5 args])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fs.h>
+],[
+       generic_file_llseek_size(NULL, 0, 0, 0, 0);
+], [
+       AC_MSG_RESULT([yes])
+       AC_DEFINE(HAVE_FILE_LLSEEK_SIZE_5ARGS, 1,
+               [kernel has generic_file_llseek_size with 5 args])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
+# 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_MSG_RESULT([no])
+])
+])
+
+#
 # LC_PROG_LINUX
 #
 # Lustre linux kernel checks
@@ -2183,8 +2331,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
@@ -2202,6 +2350,10 @@ AC_DEFUN([LC_PROG_LINUX],
          LC_EXPORT_ACCESS_PROCESS_VM
         LC_VFS_INODE_NEWSIZE_OK
 
+        # 2.6.34
+        LC_HAVE_DQUOT_FS_DISK_QUOTA
+        LC_HAVE_DQUOT_SUSPEND
+
          # 2.6.35, 3.0.0
          LC_FILE_FSYNC
          LC_EXPORT_SIMPLE_SETATTR
@@ -2214,7 +2366,6 @@ AC_DEFUN([LC_PROG_LINUX],
          LC_KERNEL_LOCKED
 
          # 2.6.38
-         LC_ATOMIC_MNT_COUNT
          LC_BLKDEV_GET_BY_DEV
          LC_GENERIC_PERMISSION
          LC_QUOTA_ON_USE_PATH
@@ -2226,10 +2377,14 @@ AC_DEFUN([LC_PROG_LINUX],
          LC_REQUEST_QUEUE_UNPLUG_FN
         LC_HAVE_FSTYPE_MOUNT
 
+        # 3.0
+        LC_DIRTY_INODE_WITH_FLAG
+
         # 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
@@ -2251,6 +2406,13 @@ AC_DEFUN([LC_PROG_LINUX],
 
         # 3.5
         LC_HAVE_CLEAR_INODE
+        LC_HAVE_ENCODE_FH_PARENT
+        LC_FILE_LLSEEK_SIZE_5ARG
+
+        # 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
@@ -2728,6 +2890,7 @@ lustre/kernel_patches/targets/2.6-oel5.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
+lustre/kernel_patches/targets/3.x-fc18.target
 lustre/ldlm/Makefile
 lustre/fid/Makefile
 lustre/fid/autoMakefile