From: Michael Wang <wang...@linux.vnet.ibm.com>

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 <wang...@linux.vnet.ibm.com>
---
 net/netfilter/core.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/net/netfilter/core.c b/net/netfilter/core.c
index e19f365..50225bd 100644
--- a/net/netfilter/core.c
+++ b/net/netfilter/core.c
@@ -131,14 +131,14 @@ 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 +155,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;
 }

-- 
1.7.4.1


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to