return mtree_store_range(mt, start, end, ptr, GFP_KERNEL);
}
+static int mtree_test_store(struct maple_tree *mt, unsigned long start,
+ void *ptr)
+{
+ return mtree_test_store_range(mt, start, start, ptr);
+}
+
static int mtree_test_insert_range(struct maple_tree *mt, unsigned long start,
unsigned long end, void *ptr)
{
* Fixed by setting the correct limit in mast_cp_to_nodes() when the
* entire right side is consumed.
*/
- mtree_insert(mt, 88, (void*)0xb1, GFP_KERNEL); // 0
- mtree_insert(mt, 84, (void*)0xa9, GFP_KERNEL); // 0
- mtree_insert(mt, 2, (void*)0x5, GFP_KERNEL); // 0
- mtree_insert(mt, 4, (void*)0x9, GFP_KERNEL); // 0
- mtree_insert(mt, 14, (void*)0x1d, GFP_KERNEL); // 0
- mtree_insert(mt, 7, (void*)0xf, GFP_KERNEL); // 0
- mtree_insert(mt, 12, (void*)0x19, GFP_KERNEL); // 0
- mtree_insert(mt, 18, (void*)0x25, GFP_KERNEL); // 0
- mtree_store_range(mt, 8, 18, (void*)0x11, GFP_KERNEL);
+ mtree_test_insert(mt, 88, (void*)0xb1); // 0
+ mtree_test_insert(mt, 84, (void*)0xa9); // 0
+ mtree_test_insert(mt, 2, (void*)0x5); // 0
+ mtree_test_insert(mt, 4, (void*)0x9); // 0
+ mtree_test_insert(mt, 14, (void*)0x1d); // 0
+ mtree_test_insert(mt, 7, (void*)0xf); // 0
+ mtree_test_insert(mt, 12, (void*)0x19); // 0
+ mtree_test_insert(mt, 18, (void*)0x25); // 0
+ mtree_test_store_range(mt, 8, 18, (void*)0x11);
+ mtree_destroy(mt);
+
+
+ /*
+ * 2. Cause a spanning rebalance of two nodes in root.
+ * Fixed by setting mast->r->max correctly.
+ */
+ mt_init_flags(mt, 0);
+ mtree_test_store(mt, 87, (void*)0xaf); // 0
+ mtree_test_store(mt, 0, (void*)0x1); // 0
+ mtree_test_load(mt, 4); // (nil)
+ mtree_test_insert(mt, 4, (void*)0x9); // 0
+ mtree_test_store(mt, 8, (void*)0x11); // 0
+ mtree_test_store(mt, 44, (void*)0x59); // 0
+ mtree_test_store(mt, 68, (void*)0x89); // 0
+ mtree_test_store(mt, 2, (void*)0x5); // 0
+ mtree_test_insert(mt, 43, (void*)0x57); // 0
+ mtree_test_insert(mt, 24, (void*)0x31); // 0
+ mtree_test_insert(mt, 844, (void*)0x699); // 0
+ mtree_test_store(mt, 84, (void*)0xa9); // 0
+ mtree_test_store(mt, 4, (void*)0x9); // 0
+ mtree_test_erase(mt, 4); // 0x9
+ mtree_test_load(mt, 5); // (nil)
+ mtree_test_erase(mt, 0); // 0x1
}
static DEFINE_MTREE(tree);