{
int i;
unsigned long prev_piv = 0;
+ void **slots = ma_get_slots(mte_to_node(mas->node),
+ mte_node_type(mas->node));
if (mte_is_root(mas->node))
return; // all limits are fine here.
if (!piv)
break;
+ if (!mte_is_leaf(mas->node)) {
+ if (!slots[i])
+ pr_err(MA_PTR"[%u] cannot be null\n",
+ mas_mn(mas), i);
+
+ MT_BUG_ON(mas->tree, !slots[i]);
+ }
+
if (prev_piv > piv) {
pr_err(MA_PTR"[%u] piv %lu < prev_piv %lu\n",
mas_mn(mas), i, piv, prev_piv);
MT_BUG_ON(mas->tree, piv > mas->max);
}
prev_piv = piv;
+ if (piv == mas->max)
+ break;
}
}
xa_mk_value(seq400[8]));
mtree_test_store_range(mt, seq400[10], seq400[11],
xa_mk_value(seq400[10]));
+ mt_validate(mt);
mt_set_non_kernel(0);
mtree_destroy(mt);
}
+static noinline void check_node_overwrite(struct maple_tree *mt)
+{
+ int i, max = 4000;
+
+ for (i = 0; i < max; i++) {
+ mtree_test_store_range(mt, i*100, i*100 + 50, xa_mk_value(i*100));
+ }
+
+ mtree_test_store_range(mt, 319951, 367950, NULL);
+ mt_dump(mt);
+ mt_validate(mt);
+}
static void check_dfs_preorder(struct maple_tree *mt)
{
check_gap_combining(&tree);
mtree_destroy(&tree);
+ mtree_init(&tree, MAPLE_ALLOC_RANGE);
+ check_node_overwrite(&tree);
+ mtree_destroy(&tree);
+
rcu_barrier();
pr_info("maple_tree: %u of %u tests passed\n", maple_tree_tests_passed,
maple_tree_tests_run);