|
@@ -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
|