Whamcloud - gitweb
LU-1337 llite: kernel 3.1 renames lock-manager ops
authorLiu Xuezhao <xuezhao.liu@emc.com>
Thu, 9 Aug 2012 02:37:39 +0000 (10:37 +0800)
committerOleg Drokin <green@whamcloud.com>
Tue, 23 Oct 2012 22:00:23 +0000 (18:00 -0400)
Kernel 3.1 renames lock-manager ops(lock_manager_operations) from
fl_xxx to lm_xxx (commit 8fb47a4fbf858a164e973b8ea8ef5e83e61f2e50).

Add LC_LM_XXX_LOCK_MANAGER_OPS/HAVE_LM_XXX_LOCK_MANAGER_OPS to check.

Re-arrange several macro definitions in lustre-core.m4 as kernel
version sequence.

Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
Change-Id: Ic86ec9db2f8262ef7ab9f5f2fb51ca79591120a4
Reviewed-on: http://review.whamcloud.com/3579
Tested-by: Hudson
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Yang Sheng <yang.sheng@intel.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/autoconf/lustre-core.m4
lustre/include/linux/lustre_compat25.h
lustre/llite/file.c

index 0bfadda..b771c53 100644 (file)
@@ -1713,6 +1713,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 +1794,42 @@ LB_LINUX_TRY_COMPILE([
 ])
 
 #
-# 2.6.38 export simple_setattr
+# 3.1.1 has ext4_blocks_for_truncate
 #
-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_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 renames lock-manager ops(lock_manager_operations) from fl_xxx to lm_xxx
+# see kernel commit 8fb47a4fbf858a164e973b8ea8ef5e83e61f2e50
+#
+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])
 ])
 ])
 
@@ -1832,26 +1872,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 <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])
-])
-])
-
-#
 # LC_PROG_LINUX
 #
 # Lustre linux kernel checks
@@ -1991,15 +2011,18 @@ AC_DEFUN([LC_PROG_LINUX],
 
          # 2.6.39
          LC_REQUEST_QUEUE_UNPLUG_FN
-       LC_HAVE_FSTYPE_MOUNT
-
-       # 3.3
-       LC_HAVE_MIGRATE_HEADER
-       LC_MIGRATEPAGE_4ARGS
+        LC_HAVE_FSTYPE_MOUNT
 
         # 3.1.1
         LC_BLOCKS_FOR_TRUNCATE
 
+        # 3.1
+        LC_LM_XXX_LOCK_MANAGER_OPS
+
+        # 3.3
+        LC_HAVE_MIGRATE_HEADER
+        LC_MIGRATEPAGE_4ARGS
+
          #
          if test x$enable_server = xyes ; then
              AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
index 6a9c060..6b8d155 100644 (file)
@@ -758,5 +758,9 @@ static inline bool selinux_is_enabled(void)
 }
 #endif
 
+#ifndef HAVE_LM_XXX_LOCK_MANAGER_OPS
+# define lm_compare_owner      fl_compare_owner
+#endif
+
 #endif /* __KERNEL__ */
 #endif /* _COMPAT25_H */
index f793d52..d03ec76 100644 (file)
@@ -2155,15 +2155,15 @@ int ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
         }
         flock.l_flock.pid = file_lock->fl_pid;
 
-        /* Somewhat ugly workaround for svc lockd.
-         * lockd installs custom fl_lmops->fl_compare_owner that checks
-         * for the fl_owner to be the same (which it always is on local node
-         * I guess between lockd processes) and then compares pid.
-         * As such we assign pid to the owner field to make it all work,
-         * conflict with normal locks is unlikely since pid space and
-         * pointer space for current->files are not intersecting */
-        if (file_lock->fl_lmops && file_lock->fl_lmops->fl_compare_owner)
-                flock.l_flock.owner = (unsigned long)file_lock->fl_pid;
+       /* Somewhat ugly workaround for svc lockd.
+        * lockd installs custom fl_lmops->lm_compare_owner that checks
+        * for the fl_owner to be the same (which it always is on local node
+        * I guess between lockd processes) and then compares pid.
+        * As such we assign pid to the owner field to make it all work,
+        * conflict with normal locks is unlikely since pid space and
+        * pointer space for current->files are not intersecting */
+       if (file_lock->fl_lmops && file_lock->fl_lmops->lm_compare_owner)
+               flock.l_flock.owner = (unsigned long)file_lock->fl_pid;
 
         switch (file_lock->fl_type) {
         case F_RDLCK: