#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)
+#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)
+#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)
+#endif
#define CFS_HLIST_HEAD_INIT HLIST_HEAD_INIT
#define CFS_HLIST_HEAD(n) HLIST_HEAD(n)
])
#
+# 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
# 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])
#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)
+#endif
#else
#define ll_d_hlist_node list_head
#define ll_d_hlist_empty(list) list_empty(list)