From ffaf4f03bd619633026d77b58830baf3b0cf869c Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 21 Aug 2025 09:03:10 -0700 Subject: [PATCH] crimson/.../transaction_manager: convert submit_transaction to coroutine Signed-off-by: Samuel Just --- .../os/seastore/transaction_manager.cc | 29 ++++++++++--------- src/crimson/os/seastore/transaction_manager.h | 1 + 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 82532a5657444..24f8df98332c3 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -445,21 +445,24 @@ TransactionManager::submit_transaction( { LOG_PREFIX(TransactionManager::submit_transaction); SUBDEBUGT(seastore_t, "start, entering reserve_projected_usage", t); - return trans_intr::make_interruptible( + co_await trans_intr::make_interruptible( t.get_handle().enter(write_pipeline.reserve_projected_usage) - ).then_interruptible([this, FNAME, &t] { - auto dispatch_result = epm->dispatch_delayed_extents(t); - auto projected_usage = dispatch_result.usage; - SUBTRACET(seastore_t, "waiting for projected_usage: {}", t, projected_usage); - return trans_intr::make_interruptible( - epm->reserve_projected_usage(projected_usage) - ).then_interruptible([this, &t, dispatch_result = std::move(dispatch_result)] { - return do_submit_transaction(t, std::move(dispatch_result)); - }).finally([this, FNAME, projected_usage, &t] { - SUBTRACET(seastore_t, "releasing projected_usage: {}", t, projected_usage); - epm->release_projected_usage(projected_usage); - }); + ); + + auto dispatch_result = epm->dispatch_delayed_extents(t); + auto projected_usage = dispatch_result.usage; + SUBTRACET(seastore_t, "waiting for projected_usage: {}", t, projected_usage); + co_await trans_intr::make_interruptible( + epm->reserve_projected_usage( + projected_usage + ) + ); + auto release_usage = seastar::defer([this, FNAME, projected_usage, &t] { + SUBTRACET(seastore_t, "releasing projected_usage: {}", t, projected_usage); + epm->release_projected_usage(projected_usage); }); + + co_await do_submit_transaction(t, std::move(dispatch_result)); } TransactionManager::submit_transaction_direct_ret diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index ad391d39fd69b..9f2988ec8e2b4 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -14,6 +14,7 @@ #include #include +#include #include "include/ceph_assert.h" #include "include/buffer.h" -- 2.39.5