Whamcloud - gitweb
LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args 98/5898/6
authorJames Simmons <uja.ornl@gmail.com>
Wed, 15 May 2013 13:18:19 +0000 (09:18 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 23 Jul 2013 05:20:31 +0000 (05:20 +0000)
In 3.9 hlist_for_each_entry use 3 args since commit

commit b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
Author: Sasha Levin <sasha.levin@oracle.com>
Date:   Wed Feb 27 17:06:00 2013 -0800

    hlist: drop the node parameter from iterators

Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
Signed-off-by: James Simmons <uja.ornl@gmail.com>
Change-Id: I8f38d562607de21771b03575e37cc0498867a570
Reviewed-on: http://review.whamcloud.com/5898
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Yang Sheng <yang.sheng@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
libcfs/include/libcfs/list.h
lustre/autoconf/lustre-core.m4
lustre/include/linux/lustre_compat25.h

index be06e74..b747804 100644 (file)
@@ -91,14 +91,24 @@ typedef struct hlist_node cfs_hlist_node_t;
 #define cfs_hlist_for_each(pos, head)      hlist_for_each(pos, head)
 #define cfs_hlist_for_each_safe(pos, n, head) \
         hlist_for_each_safe(pos, n, head)
 #define cfs_hlist_for_each(pos, head)      hlist_for_each(pos, head)
 #define cfs_hlist_for_each_safe(pos, n, head) \
         hlist_for_each_safe(pos, n, head)
+#ifdef HAVE_HLIST_FOR_EACH_3ARG
+#define cfs_hlist_for_each_entry(tpos, pos, head, member) \
+       pos = NULL; hlist_for_each_entry(tpos, head, member)
+#else
 #define cfs_hlist_for_each_entry(tpos, pos, head, member) \
         hlist_for_each_entry(tpos, pos, head, member)
 #define cfs_hlist_for_each_entry(tpos, pos, head, member) \
         hlist_for_each_entry(tpos, pos, head, member)
+#endif
 #define cfs_hlist_for_each_entry_continue(tpos, pos, member) \
         hlist_for_each_entry_continue(tpos, pos, member)
 #define cfs_hlist_for_each_entry_from(tpos, pos, member) \
         hlist_for_each_entry_from(tpos, pos, member)
 #define cfs_hlist_for_each_entry_continue(tpos, pos, member) \
         hlist_for_each_entry_continue(tpos, pos, member)
 #define cfs_hlist_for_each_entry_from(tpos, pos, member) \
         hlist_for_each_entry_from(tpos, pos, member)
+#ifdef HAVE_HLIST_FOR_EACH_3ARG
+#define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
+       pos = NULL; hlist_for_each_entry_safe(tpos, n, head, member)
+#else
 #define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
         hlist_for_each_entry_safe(tpos, pos, n, head, member)
 #define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
         hlist_for_each_entry_safe(tpos, pos, n, head, member)
+#endif
 
 #define CFS_HLIST_HEAD_INIT               HLIST_HEAD_INIT
 #define CFS_HLIST_HEAD(n)                 HLIST_HEAD(n)
 
 #define CFS_HLIST_HEAD_INIT               HLIST_HEAD_INIT
 #define CFS_HLIST_HEAD(n)                 HLIST_HEAD(n)
index 0e87d75..f850604 100644 (file)
@@ -1572,6 +1572,29 @@ LB_LINUX_TRY_COMPILE([
 ])
 
 #
 ])
 
 #
+# 3.9 uses hlist_for_each_entry with 3 args
+# b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
+#
+AC_DEFUN([LC_HAVE_HLIST_FOR_EACH_3ARG],
+[AC_MSG_CHECKING([if hlist_for_each_entry has 3 args])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/list.h>
+       #include <linux/fs.h>
+],[
+       struct inode *inode;
+       struct dentry *dentry;
+       hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) {
+               continue;
+       }
+],[
+       AC_DEFINE(HAVE_HLIST_FOR_EACH_3ARG, 1, [3 args])
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+])
+])
+
+#
 # LC_PROG_LINUX
 #
 # Lustre linux kernel checks
 # LC_PROG_LINUX
 #
 # Lustre linux kernel checks
@@ -1704,6 +1727,10 @@ AC_DEFUN([LC_PROG_LINUX],
 
         # 3.7
         LC_HAVE_POSIXACL_USER_NS
 
         # 3.7
         LC_HAVE_POSIXACL_USER_NS
+
+        # 3.9
+        LC_HAVE_HLIST_FOR_EACH_3ARG
+
         #
         if test x$enable_server = xyes ; then
                AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
         #
         if test x$enable_server = xyes ; then
                AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
index 225e2a3..1cbdc42 100644 (file)
@@ -421,8 +421,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
 #define ll_d_hlist_empty(list) hlist_empty(list)
 #define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
 #define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
 #define ll_d_hlist_empty(list) hlist_empty(list)
 #define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
 #define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
+#ifdef HAVE_HLIST_FOR_EACH_3ARG
+#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
+       p = NULL; hlist_for_each_entry(dentry, i_dentry, alias)
+#else
 #define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
         hlist_for_each_entry(dentry, p, i_dentry, alias)
 #define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
         hlist_for_each_entry(dentry, p, i_dentry, alias)
+#endif
 #else
 #define ll_d_hlist_node list_head
 #define ll_d_hlist_empty(list) list_empty(list)
 #else
 #define ll_d_hlist_node list_head
 #define ll_d_hlist_empty(list) list_empty(list)