]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: Move wr_mas offset_end setting to walk
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Thu, 25 Nov 2021 18:43:56 +0000 (13:43 -0500)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Thu, 25 Nov 2021 18:44:53 +0000 (13:44 -0500)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
lib/maple_tree.c

index 093423fedc0aacaeae802915542516e24065d69a..152c3a5af82b2612973ef9fe62f96aded2d0cbdd 100644 (file)
@@ -2168,7 +2168,7 @@ max:
 done:
        wr_mas->r_max = max;
        wr_mas->r_min = min;
-       mas->offset = offset;
+       wr_mas->offset_end = mas->offset = offset;
 }
 
 /*
@@ -3548,16 +3548,17 @@ static bool mas_wr_walk(struct ma_wr_state *wr_mas)
 
        while (true) {
                mas_wr_walk_descend(wr_mas);
-               if (mas_is_span_wr(wr_mas))
+               if (unlikely(mas_is_span_wr(wr_mas)))
                        return false;
 
                wr_mas->content = mas_slot_locked(mas, wr_mas->slots,
                                                  mas->offset);
                if (ma_is_leaf(wr_mas->type))
                        return true;
-               mas_wr_walk_traverse(wr_mas);
 
+               mas_wr_walk_traverse(wr_mas);
        }
+
        return true;
 }
 
@@ -4316,19 +4317,18 @@ static inline void *mas_store_entry(struct ma_wr_state *wr_mas)
 {
        struct ma_state *mas = wr_mas->mas;
 
-       if ((wr_mas->content = mas_start(mas)) ||
-           mas_is_none(mas) || mas->node == MAS_ROOT) {
+       if ((wr_mas->content = mas_start(mas)) || mas_is_none(mas) ||
+           mas_is_ptr(mas)) {
                mas_store_root(mas, wr_mas->entry);
                return wr_mas->content;
        }
 
-       if (!mas_wr_walk(wr_mas)) {
+       if (unlikely(!mas_wr_walk(wr_mas))) {
                mas_spanning_store(wr_mas);
                return wr_mas->content;
        }
 
        /* At this point, we are at the leaf node that needs to be altered. */
-       wr_mas->offset_end = mas->offset;
        wr_mas->end_piv = wr_mas->r_max;
        mas_wr_end_piv(wr_mas);
 
@@ -4336,7 +4336,7 @@ static inline void *mas_store_entry(struct ma_wr_state *wr_mas)
                mas_wr_extend_null(wr_mas);
 
        /* New root for a single pointer */
-       if (!mas->index && mas->last == ULONG_MAX) {
+       if (unlikely(!mas->index && mas->last == ULONG_MAX)) {
                mas_new_root(mas, wr_mas->entry);
                return wr_mas->content;
        }