Browse Source

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>
Cody P Schafer 11 years ago
parent
commit
b182837ac1
1 changed files with 4 additions and 23 deletions
  1. 4 23
      net/netfilter/ipset/ip_set_hash_netiface.c

+ 4 - 23
net/netfilter/ipset/ip_set_hash_netiface.c

@@ -46,31 +46,12 @@ struct iface_node {
 static void
 static void
 rbtree_destroy(struct rb_root *root)
 rbtree_destroy(struct rb_root *root)
 {
 {
-	struct rb_node *p, *n = root->rb_node;
-	struct iface_node *node;
-
-	/* Non-recursive destroy, like in ext3 */
-	while (n) {
-		if (n->rb_left) {
-			n = n->rb_left;
-			continue;
-		}
-		if (n->rb_right) {
-			n = n->rb_right;
-			continue;
-		}
-		p = rb_parent(n);
-		node = rb_entry(n, struct iface_node, node);
-		if (!p)
-			*root = RB_ROOT;
-		else if (p->rb_left == n)
-			p->rb_left = NULL;
-		else if (p->rb_right == n)
-			p->rb_right = NULL;
+	struct iface_node *node, *next;
 
 
+	rbtree_postorder_for_each_entry_safe(node, next, root, node)
 		kfree(node);
 		kfree(node);
-		n = p;
-	}
+
+	*root = RB_ROOT;
 }
 }
 
 
 static int
 static int