]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: Fix mas_parent_gap() propigation upwards
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 29 Sep 2020 14:37:37 +0000 (10:37 -0400)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 30 Oct 2020 19:12:41 +0000 (15:12 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
lib/maple_tree.c

index 88a783be04d77e96f214d451be90bba9608b71c5..45fc3874782f59fb92c00d77c5e66a81dbd8e1fe 100644 (file)
@@ -1186,6 +1186,7 @@ static inline void mas_parent_gap(struct ma_state *mas, unsigned char slot,
        struct maple_enode *penode;
        unsigned long *ppivots, *pgaps, *gpgaps = NULL;
        enum maple_type pmt, gpmt;
+       unsigned char pslot = slot;
 
        pnode = mte_parent(mas->node);
        pmt = gpmt = mas_parent_enum(mas, mas->node);
@@ -1197,7 +1198,8 @@ ascend:
                gpnode = mte_parent(penode);
                gpmt = mas_parent_enum(mas, penode);
                gpgaps = ma_gaps(gpnode, gpmt);
-               old_max_gap = gpgaps[slot];
+               pslot = mte_parent_slot(penode);
+               old_max_gap = gpgaps[pslot];
        }
        pgaps[slot] = new;
        if (mte_is_root(penode))
@@ -1212,7 +1214,7 @@ ascend:
        pnode = gpnode;
        pmt = gpmt;
        pgaps = gpgaps;
-       slot = mte_parent_slot(penode);
+       slot = pslot;
        penode = mt_mk_node(pnode, pmt);
        goto ascend;
 }
@@ -1239,9 +1241,8 @@ static inline void mas_update_gap(struct ma_state *mas)
        p_gap = ma_gaps(mte_parent(mas->node),
                        mas_parent_enum(mas, mas->node))[pslot];
 
-       if (p_gap != max_gap) {
+       if (p_gap != max_gap)
                mas_parent_gap(mas, pslot, max_gap);
-       }
 }
 
 /*