]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/omap: remove unnecessary extent loads when clearing. 47290/head
authorXinyu Huang <xinyu.huang@intel.com>
Tue, 26 Jul 2022 23:53:41 +0000 (23:53 +0000)
committerXinyu Huang <xinyu.huang@intel.com>
Wed, 27 Jul 2022 02:29:58 +0000 (02:29 +0000)
Signed-off-by: Xinyu Huang <xinyu.huang@intel.com>
src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc

index 4b61d119c9072ae5e034677ab034b9c8c2f89d56..0f4405bf5c685f328f12ac76ebfa56e48cf3e98c 100644 (file)
@@ -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();
+      });
+    }
   });
 }