From 74955be0c8a699a582841949464d265a34b80512 Mon Sep 17 00:00:00 2001 From: Zhang Song Date: Tue, 6 Dec 2022 14:48:42 +0800 Subject: [PATCH] crimson/os/seastore: simplify update_mappings Signed-off-by: Zhang Song --- src/crimson/os/seastore/lba_manager.cc | 36 +++++-------------- src/crimson/os/seastore/lba_manager.h | 3 +- .../os/seastore/transaction_manager.cc | 20 +++-------- 3 files changed, 14 insertions(+), 45 deletions(-) diff --git a/src/crimson/os/seastore/lba_manager.cc b/src/crimson/os/seastore/lba_manager.cc index f638bad3292c0..3e3251f062a52 100644 --- a/src/crimson/os/seastore/lba_manager.cc +++ b/src/crimson/os/seastore/lba_manager.cc @@ -9,34 +9,16 @@ namespace crimson::os::seastore { LBAManager::update_mappings_ret LBAManager::update_mappings( Transaction& t, - const std::list& extents, - const std::vector& original_paddrs) + const std::list& extents) { - assert(extents.size() == original_paddrs.size()); - auto extents_end = extents.end(); - return seastar::do_with( - extents.begin(), - original_paddrs.begin(), - [this, extents_end, &t](auto& iter_extents, - auto& iter_original_paddrs) { - return trans_intr::repeat( - [this, extents_end, &t, &iter_extents, &iter_original_paddrs] - { - if (extents_end == iter_extents) { - return update_mappings_iertr::make_ready_future< - seastar::stop_iteration>(seastar::stop_iteration::yes); - } - return update_mapping( - t, - (*iter_extents)->get_laddr(), - *iter_original_paddrs, - (*iter_extents)->get_paddr() - ).si_then([&iter_extents, &iter_original_paddrs] { - ++iter_extents; - ++iter_original_paddrs; - return seastar::stop_iteration::no; - }); - }); + return trans_intr::do_for_each(extents, + [this, &t](auto &extent) { + return update_mapping( + t, + extent->get_laddr(), + extent->get_prior_paddr_and_reset(), + extent->get_paddr() + ); }); } diff --git a/src/crimson/os/seastore/lba_manager.h b/src/crimson/os/seastore/lba_manager.h index 9df5eef0010f3..f512b73f677e1 100644 --- a/src/crimson/os/seastore/lba_manager.h +++ b/src/crimson/os/seastore/lba_manager.h @@ -177,8 +177,7 @@ public: using update_mappings_ret = update_mapping_ret; update_mappings_ret update_mappings( Transaction& t, - const std::list& extents, - const std::vector& original_paddrs); + const std::list& extents); /** * get_physical_extent_if_live diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 7ac6295ee2de4..a75d8d1896a20 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -301,24 +301,12 @@ TransactionManager::submit_transaction_direct( return trans_intr::make_interruptible( tref.get_handle().enter(write_pipeline.ool_writes) ).then_interruptible([this, FNAME, &tref] { - auto delayed_extents = tref.get_delayed_alloc_list(); - auto num_extents = delayed_extents.size(); - SUBTRACET(seastore_t, "process {} delayed extents", tref, num_extents); - std::vector delayed_paddrs; - delayed_paddrs.reserve(num_extents); - for (auto& ext : delayed_extents) { - assert(ext->get_paddr().is_delayed()); - delayed_paddrs.push_back(ext->get_paddr()); - } - return seastar::do_with( - std::move(delayed_extents), - std::move(delayed_paddrs), - [this, FNAME, &tref](auto& delayed_extents, auto& delayed_paddrs) - { + return seastar::do_with(tref.get_delayed_alloc_list(), + [this, FNAME, &tref](auto &delayed_extents) { return epm->delayed_allocate_and_write(tref, delayed_extents - ).si_then([this, FNAME, &tref, &delayed_extents, &delayed_paddrs] { + ).si_then([this, FNAME, &tref, &delayed_extents] { SUBTRACET(seastore_t, "update delayed extent mappings", tref); - return lba_manager->update_mappings(tref, delayed_extents, delayed_paddrs); + return lba_manager->update_mappings(tref, delayed_extents); }).handle_error_interruptible( crimson::ct_error::input_output_error::pass_further(), crimson::ct_error::assert_all("invalid error") -- 2.39.5