From 46b6632575d6384a746ee12d8d4ac915007f807e Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Thu, 4 Sep 2025 10:53:45 +0000 Subject: [PATCH] crimson/os/seastore: BlockSegmentManager::primary_mkfs coroutines Signed-off-by: Matan Breizman --- .../os/seastore/segment_manager/block.cc | 49 ++++++++----------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/src/crimson/os/seastore/segment_manager/block.cc b/src/crimson/os/seastore/segment_manager/block.cc index 185c139b358..a372e069eb9 100644 --- a/src/crimson/os/seastore/segment_manager/block.cc +++ b/src/crimson/os/seastore/segment_manager/block.cc @@ -7,11 +7,13 @@ #include #include +#include #include "include/buffer.h" #include "crimson/common/config_proxy.h" #include "crimson/common/errorator-loop.h" +#include "crimson/common/coroutine.h" #include "crimson/os/seastore/logging.h" #include "crimson/os/seastore/segment_manager/block.h" @@ -513,36 +515,27 @@ BlockSegmentManager::mkfs_ret BlockSegmentManager::primary_mkfs( set_device_id(sm_config.spec.id); INFO("{} path={}, {}", device_id_printer_t{get_device_id()}, device_path, sm_config); - return seastar::do_with( - seastar::file{}, - seastar::stat_data{}, - block_sm_superblock_t{}, - std::unique_ptr(), - [=, this](auto &device, auto &stat, auto &sb, auto &tracker) - { - check_create_device_ret maybe_create = check_create_device_ertr::now(); - using crimson::common::get_conf; - if (get_conf("seastore_block_create")) { - auto size = get_conf("seastore_device_size"); - maybe_create = check_create_device(device_path, size); - } - return maybe_create.safe_then([this] { - return open_device(device_path); - }).safe_then([&, sm_config](auto p) { - device = p.first; - stat = p.second; - sb = make_superblock(get_device_id(), sm_config, stat); - stats.metadata_write.increment( - ceph::encoded_sizeof(sb)); - return write_superblock(get_device_id(), device, sb); - }).finally([&] { - return device.close(); - }).safe_then([FNAME, this] { - INFO("{} complete", device_id_printer_t{get_device_id()}); - return mkfs_ertr::now(); - }); + seastar::file device; + seastar::stat_data stat; + block_sm_superblock_t sb; + std::unique_ptr tracker; + + using crimson::common::get_conf; + if (get_conf("seastore_block_create")) { + auto size = get_conf("seastore_device_size"); + co_await check_create_device(device_path, size); + } + auto p = co_await open_device(device_path); + device = p.first; + stat = p.second; + auto closer = seastar::defer([&device] { + std::ignore = device.close(); }); + sb = make_superblock(get_device_id(), sm_config, stat); + stats.metadata_write.increment(ceph::encoded_sizeof(sb)); + co_await write_superblock(get_device_id(), device, sb); + INFO("{} complete", device_id_printer_t{get_device_id()}); } BlockSegmentManager::mkfs_ret BlockSegmentManager::shard_mkfs() -- 2.39.5