From 7c673bd41623c84f9587b708f43d86358d98bf3a Mon Sep 17 00:00:00 2001 From: myoungwon oh Date: Sun, 12 Apr 2026 22:12:47 +0900 Subject: [PATCH] crimson/os/seastore: remove an extra continuation in delta-overwrite path 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 --- .../os/seastore/object_data_handler.cc | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/crimson/os/seastore/object_data_handler.cc b/src/crimson/os/seastore/object_data_handler.cc index 98b225a7197e..0696995baa5e 100644 --- a/src/crimson/os/seastore/object_data_handler.cc +++ b/src/crimson/os/seastore/object_data_handler.cc @@ -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( + auto maybe_indirect_extent = co_await ctx.tm.read_pin( 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(); - 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(); + odblock->overwrite(unaligned_offset, std::move(bl)); } ObjectDataHandler::write_ret do_zero( -- 2.47.3