From: Liam R. Howlett <Liam.Howlett@oracle.com>
Date: Wed, 2 Mar 2022 16:23:58 +0000 (-0500)
Subject: test_maple_tree: Add fuzzer test 2
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=994ba503570e89325d06dc25cbb3b35e8ef9e23f;p=users%2Fjedix%2Flinux-maple.git

test_maple_tree: Add fuzzer test 2

Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
---

diff --git a/lib/test_maple_tree.c b/lib/test_maple_tree.c
index c2ffc360b822..3647a6f98aa2 100644
--- a/lib/test_maple_tree.c
+++ b/lib/test_maple_tree.c
@@ -43,6 +43,12 @@ static int mtree_test_store_range(struct maple_tree *mt, unsigned long start,
 	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)
 {
@@ -37125,15 +37131,39 @@ static noinline void check_fuzzer(struct maple_tree *mt)
 	 * 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);