aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCody P Schafer <cody@linux.vnet.ibm.com>2014-01-23 18:56:07 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-23 19:37:03 -0500
commitb182837ac111e87f8e82cbcb0046449d9412187f (patch)
treed1d27a06ac2a6dabb8600ce810d6afc070fd7e5c
parent964fe94d71b771c8801134407ad8676874bb589e (diff)
net/netfilter/ipset/ip_set_hash_netiface.c: use rbtree postorder iteration instead of opencoding
Use rbtree_postorder_for_each_entry_safe() to destroy the rbtree instead of opencoding an alternate postorder iteration that modifies the tree Signed-off-by: Cody P Schafer <cody@linux.vnet.ibm.com> Cc: Michel Lespinasse <walken@google.com> Cc: Jan Kara <jack@suse.cz> Cc: Pablo Neira Ayuso <pablo@netfilter.org> Cc: Patrick McHardy <kaber@trash.net> Cc: Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> Cc: "David S. Miller" <davem@davemloft.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--net/netfilter/ipset/ip_set_hash_netiface.c27
1 files changed, 4 insertions, 23 deletions
diff --git a/net/netfilter/ipset/ip_set_hash_netiface.c b/net/netfilter/ipset/ip_set_hash_netiface.c
index 3f64a66bf5d9..b827a0f1f351 100644
--- a/net/netfilter/ipset/ip_set_hash_netiface.c
+++ b/net/netfilter/ipset/ip_set_hash_netiface.c
@@ -46,31 +46,12 @@ struct iface_node {
46static void 46static void
47rbtree_destroy(struct rb_root *root) 47rbtree_destroy(struct rb_root *root)
48{ 48{
49 struct rb_node *p, *n = root->rb_node; 49 struct iface_node *node, *next;
50 struct iface_node *node;
51
52 /* Non-recursive destroy, like in ext3 */
53 while (n) {
54 if (n->rb_left) {
55 n = n->rb_left;
56 continue;
57 }
58 if (n->rb_right) {
59 n = n->rb_right;
60 continue;
61 }
62 p = rb_parent(n);
63 node = rb_entry(n, struct iface_node, node);
64 if (!p)
65 *root = RB_ROOT;
66 else if (p->rb_left == n)
67 p->rb_left = NULL;
68 else if (p->rb_right == n)
69 p->rb_right = NULL;
70 50
51 rbtree_postorder_for_each_entry_safe(node, next, root, node)
71 kfree(node); 52 kfree(node);
72 n = p; 53
73 } 54 *root = RB_ROOT;
74} 55}
75 56
76static int 57static int