From 1c81d6b50c21326a486051da9c5bc1ee13938265 Mon Sep 17 00:00:00 2001 From: Xinyu Huang Date: Tue, 26 Jul 2022 23:53:41 +0000 Subject: [PATCH] crimson/os/seastore/omap: remove unnecessary extent loads when clearing. Signed-off-by: Xinyu Huang --- .../btree/omap_btree_node_impl.cc | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 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 4b61d119c90..0f4405bf5c6 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 @@ -269,16 +269,26 @@ OMapInnerNode::clear(omap_context_t oc) { LOG_PREFIX(OMapInnerNode::clear); DEBUGT("this: {}", oc.t, *this); - return trans_intr::do_for_each(iter_begin(), iter_end(), [this, oc] (auto iter) { + return trans_intr::do_for_each(iter_begin(), iter_end(), + [oc, this](auto iter) { auto laddr = iter->get_val(); - return omap_load_extent(oc, laddr, get_meta().depth - 1).si_then( - [oc] (auto &&extent) { - return extent->clear(oc); - }).si_then([oc, laddr] { - return dec_ref(oc, laddr); - }).si_then([ref = OMapNodeRef(this)] { - return clear_iertr::now(); - }); + auto ndepth = get_meta().depth - 1; + if (ndepth > 1) { + return omap_load_extent(oc, laddr, ndepth + ).si_then([oc](auto &&extent) { + return extent->clear(oc); + }).si_then([oc, laddr] { + return dec_ref(oc, laddr); + }).si_then([ref = OMapNodeRef(this)] { + return clear_iertr::now(); + }); + } else { + assert(ndepth == 1); + return dec_ref(oc, laddr + ).si_then([ref = OMapNodeRef(this)] { + return clear_iertr::now(); + }); + } }); }