From 1757afc98d92ae223c1d5b4c3bdacf77680a8232 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Tue, 29 Sep 2020 15:30:02 +0800 Subject: [PATCH] crimson/onode-staged-tree: fix extra_size during locate_split() Signed-off-by: Yingxin Cheng --- .../onode_manager/staged-fltree/stages/stage.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/stages/stage.h b/src/crimson/os/seastore/onode_manager/staged-fltree/stages/stage.h index e9c533e02ea79..1bb69e78a3cf2 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/stages/stage.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/stages/stage.h @@ -1431,6 +1431,11 @@ struct staged { iterator_t& split_iter = split_at.get(); current_size = split_iter.seek_split(current_size, extra_size, target_size); assert(!split_iter.is_end()); + if (split_iter.index() == 0) { + extra_size += iterator_t::header_size(); + } else { + extra_size = 0; + } if constexpr (!IS_BOTTOM) { NXT_STAGE_T::recursively_locate_split( current_size, extra_size + split_iter.size_to_nxt(), @@ -1451,6 +1456,11 @@ struct staged { current_size, extra_size, target_size, insert_index, insert_size, is_insert_left); assert(is_insert_left.has_value()); + if (split_iter.index() == 0) { + extra_size += iterator_t::header_size(); + } else { + extra_size = 0; + } if (*is_insert_left == false && split_iter.index() == insert_index) { // split_iter can be end // found the lower-bound of target_size @@ -1461,11 +1471,6 @@ struct staged { // Look into the next stage to identify the target_size lower-bound w/o // insert effect. assert(!split_iter.is_end()); - if (split_iter.index() == 0) { - extra_size += iterator_t::header_size(); - } else { - extra_size = 0; - } if constexpr (!IS_BOTTOM) { NXT_STAGE_T::recursively_locate_split( current_size, extra_size + split_iter.size_to_nxt(), -- 2.39.5