From d041427a6c42fcd9949d59ecf30b59e567311daf Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Thu, 11 Aug 2022 13:54:48 +0800 Subject: [PATCH] crimson/os/seastore/async_cleaner: use weak transaction to get backref mappings Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/async_cleaner.cc | 25 ++++++++---------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/crimson/os/seastore/async_cleaner.cc b/src/crimson/os/seastore/async_cleaner.cc index 70e590ec24087..70e83bb4f88e2 100644 --- a/src/crimson/os/seastore/async_cleaner.cc +++ b/src/crimson/os/seastore/async_cleaner.cc @@ -905,23 +905,14 @@ AsyncCleaner::retrieve_backref_mappings( paddr_t start_paddr, paddr_t end_paddr) { - return seastar::do_with( - backref_pin_list_t(), - [this, start_paddr, end_paddr](auto &pin_list) { - return repeat_eagain([this, start_paddr, end_paddr, &pin_list] { - return ecb->with_transaction_intr( - Transaction::src_t::READ, - "get_backref_mappings", - [this, start_paddr, end_paddr](auto &t) { - return backref_manager.get_mappings( - t, start_paddr, end_paddr - ); - }).safe_then([&pin_list](auto&& list) { - pin_list = std::move(list); - }); - }).safe_then([&pin_list] { - return seastar::make_ready_future(std::move(pin_list)); - }); + // Backref-tree doesn't support tree-read during tree-updates with parallel + // transactions. So, concurrent transactions between trim and reclaim are + // not allowed right now. + return ecb->with_transaction_weak( + "backref_get_mappings", + [this, start_paddr, end_paddr](auto &t) { + return backref_manager.get_mappings( + t, start_paddr, end_paddr); }); } -- 2.39.5