From 458368c1b88d3d028231dc91e2d323323d87623f Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Mon, 11 May 2026 12:43:47 +0800 Subject: [PATCH] crimson: coroutinize SegmentManager::get_segment_manager() this change was inspired by following warning: ``` [1/3] Building CXX object src/crimson/os/seastore/CMakeFiles/crimson-seastore.dir/segment_manager.cc.o /home/kefu/dev/ceph/src/crimson/os/seastore/segment_manager.cc:45:15: warning: lambda capture 'FNAME' is not used [-Wunused-lambda-capture] 45 | ).then([FNAME, | ^ ``` but we went further by coroutinize the whole method. because the return value of ioctl() is not checked before this change, and clang correctly flagged this with a warning, we marker it with `[[maybe_unused]]`, we will fix it in a separate change. Signed-off-by: Kefu Chai --- src/crimson/os/seastore/segment_manager.cc | 54 ++++++---------------- 1 file changed, 14 insertions(+), 40 deletions(-) diff --git a/src/crimson/os/seastore/segment_manager.cc b/src/crimson/os/seastore/segment_manager.cc index e87c9639ec0..899abf61c82 100644 --- a/src/crimson/os/seastore/segment_manager.cc +++ b/src/crimson/os/seastore/segment_manager.cc @@ -33,48 +33,22 @@ SegmentManager::get_segment_manager( const std::string &device, device_type_t dtype) { #ifdef HAVE_ZNS -LOG_PREFIX(SegmentManager::get_segment_manager); - return seastar::do_with( - static_cast(0), - [FNAME, - dtype, - device](auto &nr_zones) { - return seastar::open_file_dma( + LOG_PREFIX(SegmentManager::get_segment_manager); + auto file = co_await seastar::open_file_dma( device + "/block", - seastar::open_flags::rw - ).then([FNAME, - dtype, - device, - &nr_zones](auto file) { - return seastar::do_with( - file, - [&nr_zones](auto &f) -> seastar::future { - ceph_assert(f); - return f.ioctl(BLKGETNRZONES, (void *)&nr_zones); - }); - }).then([FNAME, - dtype, - device, - &nr_zones](auto ret) -> crimson::os::seastore::SegmentManagerRef { - crimson::os::seastore::SegmentManagerRef sm; - INFO("Found {} zones.", nr_zones); - if (nr_zones != 0) { - return std::make_unique< - segment_manager::zbd::ZBDSegmentManager - >(device + "/block"); - } else { - return std::make_unique< - segment_manager::block::BlockSegmentManager - >(device + "/block", dtype); - } - }); - }); + seastar::open_flags::rw); + ceph_assert(file); + size_t nr_zones = 0; + [[maybe_unused]] auto ret = co_await file.ioctl(BLKGETNRZONES, (void *)&nr_zones); + INFO("Found {} zones.", nr_zones); + if (nr_zones != 0) { + co_return std::make_unique(device + "/block"); + } else { + co_return std::make_unique(device + "/block", dtype); + } #else - return seastar::make_ready_future( - std::make_unique< - segment_manager::block::BlockSegmentManager - >(device + "/block", dtype)); + co_return std::make_unique(device + "/block", dtype); #endif } -} +} // namespace crimson::os::seastore -- 2.47.3