]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/omap_manager: fix the entry leak issue in
authorXuehan Xu <xuxuehan@qianxin.com>
Fri, 18 Aug 2023 11:56:50 +0000 (19:56 +0800)
committerMatan Breizman <mbreizma@redhat.com>
Wed, 11 Oct 2023 11:50:50 +0000 (11:50 +0000)
BtreeOMapManager::omap_list()

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
(cherry picked from commit cf105932a7fadf67ec494587b078bbfb4caf4d26)

src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc

index ee22b00b7a2c2e832a08c1d8d2e52f8441588d08..4db58414a6ec206a1303c84888054eb89300eef3 100644 (file)
@@ -235,11 +235,12 @@ OMapInnerNode::list(
       return trans_intr::repeat(
         [&, config, oc, this]() -> list_iertr::future<seastar::stop_iteration>
       {
-        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>(
             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>(
+               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>(
               seastar::stop_iteration::no);
           });