Skip to content

Commit 46b6632

Browse files
committed
crimson/os/seastore: BlockSegmentManager::primary_mkfs coroutines
Signed-off-by: Matan Breizman <[email protected]>
1 parent c163fc0 commit 46b6632

File tree

1 file changed

+21
-28
lines changed
  • src/crimson/os/seastore/segment_manager

1 file changed

+21
-28
lines changed

src/crimson/os/seastore/segment_manager/block.cc

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
#include <fmt/format.h>
88

99
#include <seastar/core/metrics.hh>
10+
#include <seastar/util/defer.hh>
1011

1112
#include "include/buffer.h"
1213

1314
#include "crimson/common/config_proxy.h"
1415
#include "crimson/common/errorator-loop.h"
16+
#include "crimson/common/coroutine.h"
1517

1618
#include "crimson/os/seastore/logging.h"
1719
#include "crimson/os/seastore/segment_manager/block.h"
@@ -513,36 +515,27 @@ BlockSegmentManager::mkfs_ret BlockSegmentManager::primary_mkfs(
513515
set_device_id(sm_config.spec.id);
514516
INFO("{} path={}, {}",
515517
device_id_printer_t{get_device_id()}, device_path, sm_config);
516-
return seastar::do_with(
517-
seastar::file{},
518-
seastar::stat_data{},
519-
block_sm_superblock_t{},
520-
std::unique_ptr<SegmentStateTracker>(),
521-
[=, this](auto &device, auto &stat, auto &sb, auto &tracker)
522-
{
523-
check_create_device_ret maybe_create = check_create_device_ertr::now();
524-
using crimson::common::get_conf;
525-
if (get_conf<bool>("seastore_block_create")) {
526-
auto size = get_conf<Option::size_t>("seastore_device_size");
527-
maybe_create = check_create_device(device_path, size);
528-
}
529518

530-
return maybe_create.safe_then([this] {
531-
return open_device(device_path);
532-
}).safe_then([&, sm_config](auto p) {
533-
device = p.first;
534-
stat = p.second;
535-
sb = make_superblock(get_device_id(), sm_config, stat);
536-
stats.metadata_write.increment(
537-
ceph::encoded_sizeof<block_sm_superblock_t>(sb));
538-
return write_superblock(get_device_id(), device, sb);
539-
}).finally([&] {
540-
return device.close();
541-
}).safe_then([FNAME, this] {
542-
INFO("{} complete", device_id_printer_t{get_device_id()});
543-
return mkfs_ertr::now();
544-
});
519+
seastar::file device;
520+
seastar::stat_data stat;
521+
block_sm_superblock_t sb;
522+
std::unique_ptr<SegmentStateTracker> tracker;
523+
524+
using crimson::common::get_conf;
525+
if (get_conf<bool>("seastore_block_create")) {
526+
auto size = get_conf<Option::size_t>("seastore_device_size");
527+
co_await check_create_device(device_path, size);
528+
}
529+
auto p = co_await open_device(device_path);
530+
device = p.first;
531+
stat = p.second;
532+
auto closer = seastar::defer([&device] {
533+
std::ignore = device.close();
545534
});
535+
sb = make_superblock(get_device_id(), sm_config, stat);
536+
stats.metadata_write.increment(ceph::encoded_sizeof<block_sm_superblock_t>(sb));
537+
co_await write_superblock(get_device_id(), device, sb);
538+
INFO("{} complete", device_id_printer_t{get_device_id()});
546539
}
547540

548541
BlockSegmentManager::mkfs_ret BlockSegmentManager::shard_mkfs()

0 commit comments

Comments
 (0)