]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/epm: SegmentedOolWriter to update ool paddr upon submitting writes
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 19 Jul 2024 02:02:47 +0000 (10:02 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Mon, 5 Aug 2024 03:23:36 +0000 (11:23 +0800)
In order to move the ool write futures out of the collection lock, which
will be after the transaction prepare phase.

Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/extent_placement_manager.cc

index eaa3dd94a32aa9336d126d67270e7312c7498a30..f4d2c021333db710e8cf2e2910847e508d0b3d67 100644 (file)
@@ -50,25 +50,27 @@ SegmentedOolWriter::write_record(
   auto ret = record_submitter.submit(
     std::move(record),
     with_atomic_roll_segment);
+  DEBUGT("{} start at {} with {} extents ...",
+         t, segment_allocator.get_name(),
+         ret.record_base_regardless_md,
+         extents.size());
+  paddr_t extent_addr = ret.record_base_regardless_md.offset;
+  for (auto& extent : extents) {
+    TRACET("{} extent will be written at {} -- {}",
+           t, segment_allocator.get_name(),
+           extent_addr, *extent);
+    t.update_delayed_ool_extent_addr(extent, extent_addr);
+    extent_addr = extent_addr.as_seg_paddr().add_offset(
+        extent->get_length());
+  }
   return std::move(ret.future
   ).safe_then([this, FNAME, &t,
-               record_base=ret.record_base_regardless_md,
-               extents=std::move(extents)
-              ](record_locator_t ret) mutable {
-    DEBUGT("{} finish with {}={} and {} extents",
-           t, segment_allocator.get_name(),
-           ret, record_base, extents.size());
-    paddr_t extent_addr = ret.record_block_base;
+               record_base=ret.record_base_regardless_md
+              ](record_locator_t ret) {
+    TRACET("{} finish {}=={}",
+           t, segment_allocator.get_name(), ret, record_base);
     // ool won't write metadata, so the paddrs must be equal
-    assert(record_base.offset == extent_addr);
-    for (auto& extent : extents) {
-      TRACET("{} ool extent written at {} -- {}",
-             t, segment_allocator.get_name(),
-             extent_addr, *extent);
-      t.update_delayed_ool_extent_addr(extent, extent_addr);
-      extent_addr = extent_addr.as_seg_paddr().add_offset(
-          extent->get_length());
-    }
+    assert(ret.record_block_base == record_base.offset);
   });
 }