* [PATCH Fix 0/2] Null expansion bug
@ 2022-05-11 14:43 Liam Howlett
2022-05-11 14:43 ` [PATCH Fix 1/2] maple_tree: Fix expanding null off the end of the data Liam Howlett
2022-05-11 14:43 ` [PATCH Fix 2/2] test_maple_tree: Add null expansion tests Liam Howlett
0 siblings, 2 replies; 3+ messages in thread
From: Liam Howlett @ 2022-05-11 14:43 UTC (permalink / raw)
To: maple-tree, linux-mm, linux-kernel, Andrew Morton
Andrew,
Please apply these two fixes to v9 of the maple tree.
The first should be applied to [01/69] "Maple Tree: add new data
structure" to fix the bug.
The second should be applied to [07/69] "lib/test_maple_tree: add
testing for maple tree" to test for the bug in the future.
Thanks,
Liam
*** BLURB HERE ***
Liam R. Howlett (2):
maple_tree: Fix expanding null off the end of the data.
test_maple_tree: Add null expansion tests
lib/maple_tree.c | 8 ++-----
lib/test_maple_tree.c | 55 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 57 insertions(+), 6 deletions(-)
--
2.35.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH Fix 1/2] maple_tree: Fix expanding null off the end of the data.
2022-05-11 14:43 [PATCH Fix 0/2] Null expansion bug Liam Howlett
@ 2022-05-11 14:43 ` Liam Howlett
2022-05-11 14:43 ` [PATCH Fix 2/2] test_maple_tree: Add null expansion tests Liam Howlett
1 sibling, 0 replies; 3+ messages in thread
From: Liam Howlett @ 2022-05-11 14:43 UTC (permalink / raw)
To: maple-tree, linux-mm, linux-kernel, Andrew Morton
When expanding a write of null to another null, the metadata for the end
of the node may be off by one. Fix this issue by setting the write end
pivot (wr_mas->end_piv) in mas_wr_extend_null(). Also use the saved
value for the end pivot during node stores instead of looking up the
same entry again.
There is also unnecessary code in mas_wr_extend_null() that can be
dropped.
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
---
lib/maple_tree.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/lib/maple_tree.c b/lib/maple_tree.c
index c7b7a10b15d5..967631055210 100644
--- a/lib/maple_tree.c
+++ b/lib/maple_tree.c
@@ -3981,8 +3981,7 @@ static inline bool mas_wr_node_store(struct ma_wr_state *wr_mas)
new_end++;
} else {
- if (mas_safe_pivot(mas, wr_mas->pivots, wr_mas->offset_end,
- wr_mas->type) == mas->last)
+ if (wr_mas->end_piv == mas->last)
wr_mas->offset_end++;
new_end -= wr_mas->offset_end - offset - 1;
@@ -4146,10 +4145,7 @@ static inline void mas_wr_extend_null(struct ma_wr_state *wr_mas)
mas->last = mas->max;
else
mas->last = wr_mas->pivots[wr_mas->offset_end];
- } else if ((mas->last > wr_mas->end_piv) &&
- !wr_mas->slots[wr_mas->offset_end]) {
- mas->last = wr_mas->end_piv;
- wr_mas->offset_end++;
+ wr_mas->end_piv = mas->last;
}
if (!wr_mas->content) {
--
2.35.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH Fix 2/2] test_maple_tree: Add null expansion tests
2022-05-11 14:43 [PATCH Fix 0/2] Null expansion bug Liam Howlett
2022-05-11 14:43 ` [PATCH Fix 1/2] maple_tree: Fix expanding null off the end of the data Liam Howlett
@ 2022-05-11 14:43 ` Liam Howlett
1 sibling, 0 replies; 3+ messages in thread
From: Liam Howlett @ 2022-05-11 14:43 UTC (permalink / raw)
To: maple-tree, linux-mm, linux-kernel, Andrew Morton
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
---
lib/test_maple_tree.c | 55 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/lib/test_maple_tree.c b/lib/test_maple_tree.c
index 7c377b6e0905..8277464e182c 100644
--- a/lib/test_maple_tree.c
+++ b/lib/test_maple_tree.c
@@ -35537,6 +35537,57 @@ static noinline void check_root_expand(struct maple_tree *mt)
mas_unlock(&mas);
}
+static noinline void check_null_expand(struct maple_tree *mt)
+{
+ unsigned long i, max = 100;
+ unsigned char data_end;
+ MA_STATE(mas, mt, 959, 959);
+
+ for (i = 0; i <= max; i++)
+ mtree_test_store_range(mt, i * 10, i * 10 + 5, &i);
+ /* Test expanding null at start. */
+ mas_walk(&mas);
+ data_end = mas_data_end(&mas);
+ mas_set_range(&mas, 959, 963);
+ mas_store_gfp(&mas, NULL, GFP_KERNEL);
+ MT_BUG_ON(mt, mtree_load(mt, 963) != NULL);
+ MT_BUG_ON(mt, data_end != mas_data_end(&mas));
+
+ /* Test expanding null at end. */
+ mas_set(&mas, 880);
+ mas_walk(&mas);
+ data_end = mas_data_end(&mas);
+ mas_set_range(&mas, 884, 887);
+ mas_store_gfp(&mas, NULL, GFP_KERNEL);
+ MT_BUG_ON(mt, mtree_load(mt, 884) != NULL);
+ MT_BUG_ON(mt, mtree_load(mt, 889) != NULL);
+ MT_BUG_ON(mt, data_end != mas_data_end(&mas));
+
+ /* Test expanding null at start and end. */
+ mas_set(&mas, 890);
+ mas_walk(&mas);
+ data_end = mas_data_end(&mas);
+ mas_set_range(&mas, 900, 905);
+ mas_store_gfp(&mas, NULL, GFP_KERNEL);
+ MT_BUG_ON(mt, mtree_load(mt, 899) != NULL);
+ MT_BUG_ON(mt, mtree_load(mt, 900) != NULL);
+ MT_BUG_ON(mt, mtree_load(mt, 905) != NULL);
+ MT_BUG_ON(mt, mtree_load(mt, 906) != NULL);
+ MT_BUG_ON(mt, data_end - 2 != mas_data_end(&mas));
+
+ /* Test expanding null across multiple slots. */
+ mas_set(&mas, 800);
+ mas_walk(&mas);
+ data_end = mas_data_end(&mas);
+ mas_set_range(&mas, 810, 825);
+ mas_store_gfp(&mas, NULL, GFP_KERNEL);
+ MT_BUG_ON(mt, mtree_load(mt, 809) != NULL);
+ MT_BUG_ON(mt, mtree_load(mt, 810) != NULL);
+ MT_BUG_ON(mt, mtree_load(mt, 825) != NULL);
+ MT_BUG_ON(mt, mtree_load(mt, 826) != NULL);
+ MT_BUG_ON(mt, data_end - 4 != mas_data_end(&mas));
+}
+
static noinline void check_gap_combining(struct maple_tree *mt)
{
struct maple_enode *mn1, *mn2;
@@ -37627,6 +37678,10 @@ static int maple_tree_seed(void)
check_new_node(&tree);
mtree_destroy(&tree);
+ mt_init_flags(&tree, MT_FLAGS_ALLOC_RANGE);
+ check_null_expand(&tree);
+ mtree_destroy(&tree);
+
mt_init_flags(&tree, 0);
check_dfs_preorder(&tree);
mtree_destroy(&tree);
--
2.35.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-05-11 14:43 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-11 14:43 [PATCH Fix 0/2] Null expansion bug Liam Howlett
2022-05-11 14:43 ` [PATCH Fix 1/2] maple_tree: Fix expanding null off the end of the data Liam Howlett
2022-05-11 14:43 ` [PATCH Fix 2/2] test_maple_tree: Add null expansion tests Liam Howlett
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).