From: Marc Dionne <marc.c.dionne@gmail.com>
Date: Wed, 6 Mar 2013 01:54:50 +0000 (-0500)
Subject: Linux 3.9: hlist iterator change
X-Git-Url: http://git.openafs.org/?p=openafs.git;a=commitdiff_plain;h=d585eb30baf767d50e93ee52db88d73afb76e9cb;hp=2a474f0284301151ea7342c658b08e17a7afed42

Linux 3.9: hlist iterator change

hlist iterators have been reworked to not require a temporary
node parameter.

Reviewed-on: http://gerrit.openafs.org/9403
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
(cherry picked from commit 9cfd7f768ca350d3b750e89e7ddb186bdad6f726)

Change-Id: I47df8894467f4bb1c60cf239ec0ce0a4d6ca29aa
---

diff --git a/acinclude.m4 b/acinclude.m4
index 4223bb1..6f5bc8d 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -991,6 +991,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
 		 LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE
 		 LINUX_DENTRY_OPEN_TAKES_PATH
 		 LINUX_D_ALIAS_IS_HLIST
+		 LINUX_HLIST_ITERATOR_NO_NODE
 		 LINUX_IOP_I_CREATE_TAKES_BOOL
 		 LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED
 		 LINUX_IOP_LOOKUP_TAKES_UNSIGNED
diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c
index 1366b96..8e7dfe2 100644
--- a/src/afs/LINUX/osi_vnodeops.c
+++ b/src/afs/LINUX/osi_vnodeops.c
@@ -701,7 +701,7 @@ canonical_dentry(struct inode *ip)
 {
     struct vcache *vcp = VTOAFS(ip);
     struct dentry *first = NULL, *ret = NULL, *cur;
-#if defined(D_ALIAS_IS_HLIST)
+#if defined(D_ALIAS_IS_HLIST) && !defined(HLIST_ITERATOR_NO_NODE)
     struct hlist_node *p;
 #endif
 
@@ -724,7 +724,11 @@ canonical_dentry(struct inode *ip)
 # endif
 
 #if defined(D_ALIAS_IS_HLIST)
+# if defined(HLIST_ITERATOR_NO_NODE)
+    hlist_for_each_entry(cur, &ip->i_dentry, d_alias) {
+# else
     hlist_for_each_entry(cur, p, &ip->i_dentry, d_alias) {
+# endif
 #else
     list_for_each_entry_reverse(cur, &ip->i_dentry, d_alias) {
 #endif
diff --git a/src/cf/linux-test4.m4 b/src/cf/linux-test4.m4
index fc0149f..7c0a181 100644
--- a/src/cf/linux-test4.m4
+++ b/src/cf/linux-test4.m4
@@ -714,6 +714,21 @@ AC_DEFUN([LINUX_D_ALIAS_IS_HLIST], [
 ])
 
 
+AC_DEFUN([LINUX_HLIST_ITERATOR_NO_NODE], [
+  AC_CHECK_LINUX_BUILD([whether hlist iterators don't need a node parameter],
+			[ac_cv_linux_hlist_takes_no_node],
+			[#include <linux/list.h>
+			#include <linux/fs.h>],
+			[struct dentry *d = NULL, *cur;
+			struct inode *ip;
+			hlist_for_each_entry(cur, &ip->i_dentry, d_alias) { }
+			],
+			[HLIST_ITERATOR_NO_NODE],
+			[define if hlist iterators don't need a node parameter],
+			[])
+])
+
+
 AC_DEFUN([LINUX_IOP_I_CREATE_TAKES_BOOL], [
   AC_CHECK_LINUX_BUILD([whether inode_operations.create takes a bool],
 			[ac_cv_linux_func_i_create_takes_bool],
