From: Xinyu Huang Date: Tue, 26 Jul 2022 23:53:41 +0000 (+0000) Subject: crimson/os/seastore/omap: remove unnecessary extent loads when clearing. X-Git-Tag: v18.0.0~416^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1c81d6b50c21326a486051da9c5bc1ee13938265;p=ceph.git crimson/os/seastore/omap: remove unnecessary extent loads when clearing. Signed-off-by: Xinyu Huang --- 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 4b61d119c907..0f4405bf5c68 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(); + }); + } }); }