LBAManager::update_mappings_ret
LBAManager::update_mappings(
Transaction& t,
- const std::list<LogicalCachedExtentRef>& extents,
- const std::vector<paddr_t>& original_paddrs)
+ const std::list<LogicalCachedExtentRef>& 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()
+ );
});
}
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<paddr_t> 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")