| From: Liam Howlett <liam.howlett@oracle.com> |
| Subject: maple_tree: use metadata for mas_dead_leaves() walk |
| Date: Fri, 15 Jul 2022 19:43:08 +0000 |
| |
| When walking the dead leaves, use the nodes metadata for the end of the |
| node. This avoids needing to use tricks for BE/LE unions. |
| |
| Link: https://lkml.kernel.org/r/20220715194258.1734056-1-Liam.Howlett@oracle.com |
| Fixes: d0aac5e48048 (Maple Tree: add new data structure) |
| Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| lib/maple_tree.c | 7 ++----- |
| 1 file changed, 2 insertions(+), 5 deletions(-) |
| |
| --- a/lib/maple_tree.c~maple-tree-add-new-data-structure-fix-6 |
| +++ a/lib/maple_tree.c |
| @@ -5390,15 +5390,12 @@ unsigned char mas_dead_leaves(struct ma_ |
| enum maple_type type; |
| void *entry; |
| int offset; |
| + unsigned end = mas_data_end(mas); |
| |
| - for (offset = 0; offset < mt_slot_count(mas->node); offset++) { |
| + for (offset = 0; offset <= end; offset++) { |
| entry = mas_slot_locked(mas, slots, offset); |
| type = mte_node_type(entry); |
| node = mte_to_node(entry); |
| - /* Use both node and type to catch LE & BE metadata */ |
| - if (!node || !type) |
| - break; |
| - |
| mte_set_node_dead(entry); |
| smp_wmb(); /* Needed for RCU */ |
| node->type = type; |
| _ |