From: Liam R. Howlett Date: Tue, 14 Oct 2025 20:12:13 +0000 (-0400) Subject: maple_tree: Add cp_converged() helper X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=f1ca01e8c3c737192c11d938624222081ab5d208;p=users%2Fjedix%2Flinux-maple.git maple_tree: Add cp_converged() helper When the maple copy node converges into a single entry, then certain operations can stop ascending the tree. This is used more later. Signed-off-by: Liam R. Howlett --- diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 77683a037d0e..836eafe85b74 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -3460,6 +3460,16 @@ static inline bool cp_is_new_root(struct maple_copy *cp, struct ma_state *mas) return true; } +static inline bool cp_converged(struct maple_copy *cp, struct ma_state *mas, + struct ma_state *sib) +{ + if (cp->d_count != 1 || sib->end) + return false; + + cp->dst[0].node->parent = ma_parent_ptr(mas_mn(mas)->parent); + return true; +} + /* * spanning_ascend() - See if a spanning store operation has to keep walking up * the tree @@ -3542,10 +3552,8 @@ static inline bool rebalance_ascend(struct maple_copy *cp, if (cp_is_new_root(cp, mas)) return false; - if (cp->d_count == 1 && !sib->end) { - cp->dst[0].node->parent = ma_parent_ptr(mas_mn(mas)->parent); + if (cp_converged(cp, mas, sib)) return false; - } cp->height++; copy_tree_location(parent, mas);