From c147bc81e2ddabdc9a1e28ba88d404d97b82b293 Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Tue, 16 Sep 2025 15:50:21 -0400 Subject: [PATCH] cp_data_write: simplify Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 58 ++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index a7e121109ba3..f84c8cef9b06 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -3229,12 +3229,14 @@ void cp_data_write(struct maple_copy *cp, struct ma_state *mas) struct maple_node *dst, *src; unsigned char s, d; unsigned char dst_offset; - unsigned char data, data_offset; + unsigned char data_offset; unsigned char src_end, s_offset; - unsigned char split, next_node, size; + unsigned char split; unsigned long s_max, d_max; + unsigned char dst_size; enum maple_type s_mt, d_mt; + data_offset = 0; s = d = 0; /* Readability help */ src = cp->src[s].node; @@ -3245,31 +3247,27 @@ void cp_data_write(struct maple_copy *cp, struct ma_state *mas) s_max = cp->src[s].max; s_mt = cp->src[s].mt; d_mt = cp->dst[d].mt; - data = cp->data; - - dst_offset = 0; - data_offset = 0; - next_node = split; - /* - * size (and split, and next_node will be 1 indexed while - * src start/end dst start/end are 0 indexed - */ + dst_size = split + 1; do { - do { - size = next_node - data_offset + 1; - /* Fill the destination */ - if (src_end - s_offset + 1 < size) - size = src_end - s_offset + 1; + dst_offset = 0; + d_max = 0; + dst = cp->dst[d].node; + d_mt = cp->dst[d].mt; + dst_size = split; + + while (dst_size) { + unsigned char size; - if (split - dst_offset + 1 < size) - size = split - dst_offset + 1; + if (src_end - s_offset + 1 < dst_size) + size = src_end - s_offset + 1; + else + size = dst_size; d_max = node_copy(mas, src, s_offset, size, s_max, s_mt, dst, dst_offset, d_mt); - data_offset += size; + dst_offset += size; s_offset += size; - if (s_offset > src_end) { /* This source is exhausted */ s++; @@ -3278,7 +3276,6 @@ void cp_data_write(struct maple_copy *cp, struct ma_state *mas) node_finalise(dst, d_mt, dst_offset); return; } - d_max = s_max; /* Reset local src */ src = cp->src[s].node; s_offset = cp->src[s].start; @@ -3286,11 +3283,10 @@ void cp_data_write(struct maple_copy *cp, struct ma_state *mas) s_max = cp->src[s].max; s_mt = cp->src[s].mt; } - } while (data_offset <= next_node); - next_node *= 2; - if (next_node > data + 1) - next_node = data + 1; + dst_size -= size; + data_offset += size; + } split = cp->split; cp->dst[d].max = d_max; @@ -3308,23 +3304,21 @@ void cp_data_write(struct maple_copy *cp, struct ma_state *mas) s_offset--; } /* Set dst max and clear pivot */ - next_node++; split++; data_offset--; dst_offset--; cp->dst[d].max = ma_pivots(dst, d_mt)[dst_offset - 1]; } + node_finalise(dst, d_mt, dst_offset); if (d >= cp->d_count) { - WARN_ON(data_offset < data); + WARN_ON(data_offset < cp->data); return; } - /* Reset local dst */ + + /* Next dst */ ++d; - dst = cp->dst[d].node; - d_mt = cp->dst[d].mt; - dst_offset = 0; - } while (data_offset <= data); + } while (data_offset <= cp->data); } -- 2.51.0