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 |
