]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: remove an extra continuation in delta-overwrite path 68340/head
authormyoungwon oh <ohmyoungwon@gmail.com>
Sun, 12 Apr 2026 13:12:47 +0000 (22:12 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Mon, 13 Apr 2026 10:28:45 +0000 (19:28 +0900)
get_mutable_extent() does not return a future,
so there is no need to keep it in a separate continuation.
Inline it into the next step to simplify the path and
avoid unnecessary continuation overhead.

Signed-off-by: Myoungwon Oh <ohmyoungwon@gmail.com>
src/crimson/os/seastore/object_data_handler.cc

index 98b225a7197e95843764d4f4e34809c9290ec4f3..0696995baa5e68401e87a0a40714579c41707e02 100644 (file)
@@ -217,7 +217,7 @@ ObjectDataHandler::delta_based_overwrite(
   DEBUGT("0x{:x}~0x{:x} {} zero={}",
     ctx.t, unaligned_offset, unaligned_len, overwrite_mapping, !data.has_value());
   // delta based overwrite
-  return ctx.tm.read_pin<ObjectDataBlock>(
+  auto maybe_indirect_extent = co_await ctx.tm.read_pin<ObjectDataBlock>(
     ctx.t,
     overwrite_mapping
   ).handle_error_interruptible(
@@ -225,20 +225,17 @@ ObjectDataHandler::delta_based_overwrite(
     crimson::ct_error::assert_all{
       "ObjectDataHandler::do_remapping hit invalid error"
     }
-  ).si_then([ctx](auto maybe_indirect_extent) {
-    assert(!maybe_indirect_extent.is_indirect());
-    return ctx.tm.get_mutable_extent(ctx.t, maybe_indirect_extent.extent);
-  }).si_then([overwrite_mapping, unaligned_offset,
-             unaligned_len, data=std::move(data)](auto extent) {
-    bufferlist bl;
-    if (data) {
-      bl.append(*data);
-    } else {
-      bl.append_zero(unaligned_len);
-    }
-    auto odblock = extent->template cast<ObjectDataBlock>();
-    odblock->overwrite(unaligned_offset, std::move(bl));
-  });
+  );
+  assert(!maybe_indirect_extent.is_indirect());
+  auto extent = ctx.tm.get_mutable_extent(ctx.t, maybe_indirect_extent.extent);
+  bufferlist bl;
+  if (data) {
+    bl.append(*data);
+  } else {
+    bl.append_zero(unaligned_len);
+  }
+  auto odblock = extent->template cast<ObjectDataBlock>();
+  odblock->overwrite(unaligned_offset, std::move(bl));
 }
 
 ObjectDataHandler::write_ret do_zero(