summaryrefslogtreecommitdiff
path: root/lib/maple_tree.c
diff options
context:
space:
mode:
authorWei Yang <richard.weiyang@gmail.com>2025-06-24 15:18:40 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-07-17 18:35:14 +0200
commit16713404241832aad36448e7ab76821591214f36 (patch)
tree69385ecbed0d0599a7c4c77b70c98bd9104ebc85 /lib/maple_tree.c
parent688bf63ee6ba04cbaa47a1233716dddb821b7c26 (diff)
downloadlinux-16713404241832aad36448e7ab76821591214f36.tar.gz
linux-16713404241832aad36448e7ab76821591214f36.tar.bz2
linux-16713404241832aad36448e7ab76821591214f36.zip
maple_tree: fix mt_destroy_walk() on root leaf node
commit ea9b77f98d94c4d5c1bd1ac1db078f78b40e8bf5 upstream. On destroy, we should set each node dead. But current code miss this when the maple tree has only the root node. The reason is mt_destroy_walk() leverage mte_destroy_descend() to set node dead, but this is skipped since the only root node is a leaf. Fixes this by setting the node dead if it is a leaf. Link: https://lore.kernel.org/all/20250407231354.11771-1-richard.weiyang@gmail.com/ Link: https://lkml.kernel.org/r/20250624191841.64682-1-Liam.Howlett@oracle.com Fixes: 54a611b60590 ("Maple Tree: add new data structure") Signed-off-by: Wei Yang <richard.weiyang@gmail.com> Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com> Reviewed-by: Dev Jain <dev.jain@arm.com> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'lib/maple_tree.c')
-rw-r--r--lib/maple_tree.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/lib/maple_tree.c b/lib/maple_tree.c
index 27f55f61d88e..6f7a2c9cf922 100644
--- a/lib/maple_tree.c
+++ b/lib/maple_tree.c
@@ -5270,6 +5270,7 @@ static void mt_destroy_walk(struct maple_enode *enode, struct maple_tree *mt,
struct maple_enode *start;
if (mte_is_leaf(enode)) {
+ mte_set_node_dead(enode);
node->type = mte_node_type(enode);
goto free_leaf;
}