]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
maple_tree: Fix splitting causing deficient nodes.
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 4 Aug 2020 14:15:41 +0000 (10:15 -0400)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Fri, 30 Oct 2020 19:08:56 +0000 (15:08 -0400)
When splitting a node, ensure a deficient node is not created when a
NULL in encountered at the split.  Also adjust the checking of the limit
when incrementing to ensure both the min and the number on the right are
zero based.

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
lib/maple_tree.c

index fb28b36cd79e962a1061838169d92955bef2a9dc..1bf8b7a8d6448eacc085d165c03fcc8864d6fd87 100644 (file)
@@ -1487,7 +1487,7 @@ static inline int mab_no_null_split(struct maple_big_node *b_node,
                /* If the split is less than the max slot && the right side will
                 * still be sufficient, then increment the split on NULL.
                 */
-               if ((split < slot_cnt - 1) &&
+               if ((split < mt_slots[b_node->type] - 1) &&
                    (b_node->b_end - split) < (mt_min_slots[b_node->type]))
                        split++;
                else
@@ -1521,7 +1521,7 @@ static inline int mab_calc_split(struct maple_big_node *b_node,
                 */
                while (((b_node->pivot[split] - b_node->min) < slot_cnt - 1) &&
                       (split < slot_cnt - 1) &&
-                      (b_node->b_end - split > mt_min_slots[b_node->type]))
+                      (b_node->b_end - split > mt_min_slots[b_node->type] - 1))
                        split++;
        }