From: Samuel Just Date: Fri, 17 Oct 2025 22:07:57 +0000 (+0000) Subject: crimson/.../transaction_manager: convert remap_mappings to coroutine X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=945fbce2f4aa437f171852de595c8f34779bc49b;p=ceph-ci.git crimson/.../transaction_manager: convert remap_mappings to coroutine Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index ed224520172..131a91a86a5 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -929,48 +929,31 @@ public: std::array remaps) { if (!mapping.is_indirect() && mapping.is_zero_reserved()) { - return seastar::do_with( - std::vector( - remaps.begin(), remaps.end()), - std::vector(), - [&t, mapping=std::move(mapping), this] - (auto &remaps, auto &mappings) mutable { - auto orig_laddr = mapping.get_key(); - return remove(t, std::move(mapping) - ).si_then([&remaps, &t, &mappings, orig_laddr, - this](auto pos) { - return seastar::do_with( - std::move(pos), - [this, &t, &remaps, orig_laddr, &mappings](auto &pos) { - return trans_intr::do_for_each( - remaps.begin(), - remaps.end(), - [&t, &pos, orig_laddr, &mappings, this] - (const auto &remap) mutable { - auto laddr = (orig_laddr + remap.offset).checked_to_laddr(); - return this->reserve_region( - t, - std::move(pos), - laddr, - remap.len - ).si_then([&mappings](auto new_mapping) { - mappings.emplace_back(new_mapping); - return new_mapping.next(); - }).si_then([&pos](auto new_mapping) { - pos = std::move(new_mapping); - return seastar::now(); - }); - }); - }); - }).si_then([&mappings] { return std::move(mappings); }); - }).handle_error_interruptible( + std::vector ret; + auto orig_laddr = mapping.get_key(); + auto pos = co_await remove( + t, std::move(mapping) + ).handle_error_interruptible( remap_mappings_iertr::pass_further{}, - crimson::ct_error::assert_all{ - "remap_mappings hit invalid error" - } + crimson::ct_error::assert_all{"unexpected error"} ); + for (auto &remap : remaps) { + auto laddr = (orig_laddr + remap.offset).checked_to_laddr(); + auto new_mapping = co_await this->reserve_region( + t, + std::move(pos), + laddr, + remap.len + ).handle_error_interruptible( + remap_mappings_iertr::pass_further{}, + crimson::ct_error::assert_all{"unexpected error"} + ); + ret.emplace_back(new_mapping); + pos = co_await new_mapping.next(); + } + co_return ret; } else { - return remap_pin( + co_return co_await remap_pin( t, std::move(mapping), std::move(remaps)); } }