From: Xuehan Xu Date: Fri, 18 Aug 2023 11:56:50 +0000 (+0800) Subject: crimson/os/seastore/omap_manager: fix the entry leak issue in X-Git-Tag: v19.0.0~635^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F53051%2Fhead;p=ceph.git crimson/os/seastore/omap_manager: fix the entry leak issue in BtreeOMapManager::omap_list() Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc index ee22b00b7a2c..4db58414a6ec 100644 --- a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc +++ b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc @@ -235,11 +235,12 @@ OMapInnerNode::list( return trans_intr::repeat( [&, config, oc, this]() -> list_iertr::future { - if (iter == liter || result.size() == config.max_result_size) { - complete = iter == liter; + if (iter == liter) { + complete = true; return list_iertr::make_ready_future( seastar::stop_iteration::yes); } + assert(result.size() < config.max_result_size); auto laddr = iter->get_val(); return omap_load_extent( oc, laddr, @@ -278,8 +279,12 @@ OMapInnerNode::list( } } result.merge(std::move(child_result)); + if (result.size() == config.max_result_size) { + return list_iertr::make_ready_future( + seastar::stop_iteration::yes); + } ++iter; - assert(child_complete || result.size() == config.max_result_size); + assert(child_complete); return list_iertr::make_ready_future( seastar::stop_iteration::no); });