diff options
author | Cody P Schafer <cody@linux.vnet.ibm.com> | 2014-01-23 18:56:07 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-23 19:37:03 -0500 |
commit | b182837ac111e87f8e82cbcb0046449d9412187f (patch) | |
tree | d1d27a06ac2a6dabb8600ce810d6afc070fd7e5c | |
parent | 964fe94d71b771c8801134407ad8676874bb589e (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.c | 27 |
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 { | |||
46 | static void | 46 | static void |
47 | rbtree_destroy(struct rb_root *root) | 47 | rbtree_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 | ||
76 | static int | 57 | static int |