From f4c2f68c12be0a106afd28b24eedb9c59b6e6d42 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Fri, 18 Aug 2023 19:56:50 +0800 Subject: [PATCH] crimson/os/seastore/omap_manager: fix the entry leak issue in BtreeOMapManager::omap_list() Signed-off-by: Xuehan Xu (cherry picked from commit cf105932a7fadf67ec494587b078bbfb4caf4d26) --- .../omap_manager/btree/omap_btree_node_impl.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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 ee22b00b7a2c2..4db58414a6ec2 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); }); -- 2.39.5