return entry;
}
+void *ma_destroy_walk(struct ma_state *mas)
+{
+ struct maple_node *mn = mas->node;
+ unsigned int type = mt_node_type(mas->node);
+ int i;
+
+ switch (type) {
+ case maple_leaf_64:
+ break;
+ case maple_range_64:
+ for (i = 0; i < MAPLE_RANGE64_SLOTS; i++) {
+ if (i > 0 && mn->mr64.pivot[i] == 0)
+ break;
+ ma_destroy_walk(mn->mr64.slot[i]);
+ }
+ break;
+ default:
+ break;
+ }
+ mt_free(mn);
+}
+
/* Interface */
void __init maple_tree_init(void)
{
void mtree_destroy(struct maple_tree *mt)
{
+ MA_STATE(ms, mt, 0, 0);
+ mtree_lock(mt);
+ if (xa_is_node(mt->ma_root)) {
+ ms.node = mt_to_node(mt->ma_root);
+ ma_destroy_walk(&ms);
+ }
+ mt->ma_root = NULL;
+ mtree_unlock(mt);
}
+EXPORT_SYMBOL(mtree_destroy);
#ifdef MT_DEBUG