summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorMichael Wang <wangyun@linux.vnet.ibm.com>2012-08-16 22:33:39 +0400
committerPablo Neira Ayuso <pablo@netfilter.org>2012-08-22 21:17:20 +0400
commit6705e86724f1ac83394592be7dbfc0c07ac25aa2 (patch)
tree266845a27df757cd561b65a855d4a3994139e318 /net
parent2834a6386b86a5dd20380aadb01897c525448aa7 (diff)
downloadlinux-6705e86724f1ac83394592be7dbfc0c07ac25aa2.tar.xz
netfilter: replace list_for_each_continue_rcu with new interface
This patch replaces list_for_each_continue_rcu() with list_for_each_entry_continue_rcu() to allow removing list_for_each_continue_rcu(). Signed-off-by: Michael Wang <wangyun@linux.vnet.ibm.com> Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r--net/netfilter/core.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/net/netfilter/core.c b/net/netfilter/core.c
index 0bc6b60db4df..8f4b0b2b6f80 100644
--- a/net/netfilter/core.c
+++ b/net/netfilter/core.c
@@ -131,14 +131,13 @@ unsigned int nf_iterate(struct list_head *head,
int hook_thresh)
{
unsigned int verdict;
+ struct nf_hook_ops *elem = list_entry_rcu(*i, struct nf_hook_ops, list);
/*
* The caller must not block between calls to this
* function because of risk of continuing from deleted element.
*/
- list_for_each_continue_rcu(*i, head) {
- struct nf_hook_ops *elem = (struct nf_hook_ops *)*i;
-
+ list_for_each_entry_continue_rcu(elem, head, list) {
if (hook_thresh > elem->priority)
continue;
@@ -155,11 +154,14 @@ repeat:
continue;
}
#endif
- if (verdict != NF_REPEAT)
+ if (verdict != NF_REPEAT) {
+ *i = &elem->list;
return verdict;
+ }
goto repeat;
}
}
+ *i = &elem->list;
return NF_ACCEPT;
}