From: Yingxin Cheng Date: Mon, 29 Apr 2024 03:03:02 +0000 (+0800) Subject: crimson/os/seastore/extent_placement_manager: make reserve and block atomic X-Git-Tag: v19.1.1~306^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=7fef75321e6ccb05c44254ab97cee9285646338b;p=ceph.git crimson/os/seastore/extent_placement_manager: make reserve and block atomic Signed-off-by: Yingxin Cheng (cherry picked from commit 71461dafdfb59df8e385f9b276576564cfeddb02) --- diff --git a/src/crimson/os/seastore/extent_placement_manager.cc b/src/crimson/os/seastore/extent_placement_manager.cc index 5f967e444d76f..c5b5751bdb302 100644 --- a/src/crimson/os/seastore/extent_placement_manager.cc +++ b/src/crimson/os/seastore/extent_placement_manager.cc @@ -524,11 +524,10 @@ ExtentPlacementManager::BackgroundProcess::reserve_projected_usage( ++stats.io_blocked_count; stats.io_blocked_sum += stats.io_blocking_num; - return seastar::repeat([this, usage, FNAME] { - DEBUG("setup and wait blocking_io..."); - blocking_io = seastar::promise<>(); - return blocking_io->get_future( - ).then([this, usage, FNAME] { + blocking_io = seastar::promise<>(); + return blocking_io->get_future( + ).then([this, usage, FNAME] { + return seastar::repeat([this, usage, FNAME] { ceph_assert(!blocking_io); auto res = try_reserve_io(usage); if (res.is_successful()) { @@ -544,8 +543,12 @@ ExtentPlacementManager::BackgroundProcess::reserve_projected_usage( res.cleaner_result.reserve_cold_success, usage); abort_io_usage(usage, res); - return seastar::make_ready_future( - seastar::stop_iteration::no); + blocking_io = seastar::promise<>(); + return blocking_io->get_future( + ).then([] { + return seastar::make_ready_future( + seastar::stop_iteration::no); + }); } }); });