]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: simplify update_mappings
authorZhang Song <zhangsong325@gmail.com>
Tue, 6 Dec 2022 06:48:42 +0000 (14:48 +0800)
committerZhang Song <zhangsong325@gmail.com>
Wed, 7 Dec 2022 06:26:58 +0000 (14:26 +0800)
Signed-off-by: Zhang Song <zhangsong325@gmail.com>
src/crimson/os/seastore/lba_manager.cc
src/crimson/os/seastore/lba_manager.h
src/crimson/os/seastore/transaction_manager.cc

index f638bad3292c05f8d8d74ea451452cb27b5854d7..3e3251f062a52562dc97b04524638f8d57e6b4aa 100644 (file)
@@ -9,34 +9,16 @@ namespace crimson::os::seastore {
 LBAManager::update_mappings_ret
 LBAManager::update_mappings(
   Transaction& t,
-  const std::list<LogicalCachedExtentRef>& extents,
-  const std::vector<paddr_t>& original_paddrs)
+  const std::list<LogicalCachedExtentRef>& extents)
 {
-  assert(extents.size() == original_paddrs.size());
-  auto extents_end = extents.end();
-  return seastar::do_with(
-      extents.begin(),
-      original_paddrs.begin(),
-      [this, extents_end, &t](auto& iter_extents,
-                              auto& iter_original_paddrs) {
-    return trans_intr::repeat(
-      [this, extents_end, &t, &iter_extents, &iter_original_paddrs]
-    {
-      if (extents_end == iter_extents) {
-        return update_mappings_iertr::make_ready_future<
-          seastar::stop_iteration>(seastar::stop_iteration::yes);
-      }
-      return update_mapping(
-          t,
-          (*iter_extents)->get_laddr(),
-          *iter_original_paddrs,
-          (*iter_extents)->get_paddr()
-      ).si_then([&iter_extents, &iter_original_paddrs] {
-        ++iter_extents;
-        ++iter_original_paddrs;
-        return seastar::stop_iteration::no;
-      });
-    });
+  return trans_intr::do_for_each(extents,
+                                [this, &t](auto &extent) {
+    return update_mapping(
+      t,
+      extent->get_laddr(),
+      extent->get_prior_paddr_and_reset(),
+      extent->get_paddr()
+    );
   });
 }
 
index 9df5eef0010f3195876e5c92af8f95243809c3b3..f512b73f677e11f2834532974dd7185fffca4382 100644 (file)
@@ -177,8 +177,7 @@ public:
   using update_mappings_ret = update_mapping_ret;
   update_mappings_ret update_mappings(
     Transaction& t,
-    const std::list<LogicalCachedExtentRef>& extents,
-    const std::vector<paddr_t>& original_paddrs);
+    const std::list<LogicalCachedExtentRef>& extents);
 
   /**
    * get_physical_extent_if_live
index 7ac6295ee2de421b58326aa81b46afc649d12da5..a75d8d1896a20836c302de746a2e08ce80d4983c 100644 (file)
@@ -301,24 +301,12 @@ TransactionManager::submit_transaction_direct(
   return trans_intr::make_interruptible(
     tref.get_handle().enter(write_pipeline.ool_writes)
   ).then_interruptible([this, FNAME, &tref] {
-    auto delayed_extents = tref.get_delayed_alloc_list();
-    auto num_extents = delayed_extents.size();
-    SUBTRACET(seastore_t, "process {} delayed extents", tref, num_extents);
-    std::vector<paddr_t> delayed_paddrs;
-    delayed_paddrs.reserve(num_extents);
-    for (auto& ext : delayed_extents) {
-      assert(ext->get_paddr().is_delayed());
-      delayed_paddrs.push_back(ext->get_paddr());
-    }
-    return seastar::do_with(
-      std::move(delayed_extents),
-      std::move(delayed_paddrs),
-      [this, FNAME, &tref](auto& delayed_extents, auto& delayed_paddrs)
-    {
+    return seastar::do_with(tref.get_delayed_alloc_list(),
+                           [this, FNAME, &tref](auto &delayed_extents) {
       return epm->delayed_allocate_and_write(tref, delayed_extents
-      ).si_then([this, FNAME, &tref, &delayed_extents, &delayed_paddrs] {
+      ).si_then([this, FNAME, &tref, &delayed_extents] {
         SUBTRACET(seastore_t, "update delayed extent mappings", tref);
-        return lba_manager->update_mappings(tref, delayed_extents, delayed_paddrs);
+        return lba_manager->update_mappings(tref, delayed_extents);
       }).handle_error_interruptible(
         crimson::ct_error::input_output_error::pass_further(),
         crimson::ct_error::assert_all("invalid error")