From: myoungwon oh Date: Wed, 22 Apr 2026 10:15:53 +0000 (+0900) Subject: crimson/os/seastore: switch co_routine in circular_journal_space X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d5a85f30607e59850e269f78d3303c501b87a128;p=ceph.git crimson/os/seastore: switch co_routine in circular_journal_space Signed-off-by: Myoungwon Oh --- diff --git a/src/crimson/os/seastore/journal/circular_journal_space.cc b/src/crimson/os/seastore/journal/circular_journal_space.cc index 2da3d1f1d229..01023109b362 100644 --- a/src/crimson/os/seastore/journal/circular_journal_space.cc +++ b/src/crimson/os/seastore/journal/circular_journal_space.cc @@ -114,25 +114,21 @@ CircularJournalSpace::open_ret CircularJournalSpace::open(bool is_mkfs) { DEBUG( "initialize header block in CircularJournalSpace length {}, head: {}", bl.length(), header); - return write_header( - ).safe_then([this]() { - return open_ret( - open_ertr::ready_future_marker{}, - get_written_to()); - }).handle_error( + co_await write_header( + ).handle_error( open_ertr::pass_further{}, crimson::ct_error::assert_all{ - "Invalid error write_header" + "Invalid error write_header" } ); + + co_return get_written_to(); } ceph_assert(initialized); if (written_to.segment_seq == NULL_SEG_SEQ) { written_to.segment_seq = 0; } - return open_ret( - open_ertr::ready_future_marker{}, - get_written_to()); + co_return get_written_to(); } ceph::bufferlist CircularJournalSpace::encode_header() @@ -161,13 +157,13 @@ CircularJournalSpace::device_write_bl( LOG_PREFIX(CircularJournalSpace::device_write_bl); auto length = bl.length(); if (offset + length >= get_journal_end()) { - return crimson::ct_error::erange::make(); + co_return co_await submit_ertr::future<>(crimson::ct_error::erange::make()); } DEBUG( "overwrite in CircularJournalSpace, offset {}, length {}", offset, length); - return device->writev(offset, bl + co_await device->writev(offset, bl ).handle_error( submit_ertr::pass_further{}, crimson::ct_error::assert_all{ "Invalid error device->write" } @@ -182,39 +178,36 @@ CircularJournalSpace::read_header() auto bptr = bufferptr(ceph::buffer::create_page_aligned( device->get_block_size())); DEBUG("reading {}", device->get_shard_journal_start()); - return device->read(device->get_shard_journal_start(), bptr - ).safe_then([bptr, FNAME, this]() mutable - -> read_header_ret { - bufferlist bl; - bl.append(bptr); - auto bp = bl.cbegin(); - cbj_header_t cbj_header; - try { - decode(cbj_header, bp); - } catch (ceph::buffer::error &e) { - ERROR("unable to read header block"); - return crimson::ct_error::enoent::make(); - } - if (!device->is_end_to_end_data_protection()) { - auto bliter = bl.cbegin(); - auto test_crc = bliter.crc32c( - ceph::encoded_sizeof_bounded(), - -1); - ceph_le32 recorded_crc_le; - decode(recorded_crc_le, bliter); - uint32_t recorded_crc = recorded_crc_le; - if (test_crc != recorded_crc) { - ERROR("error, header crc mismatch."); - return read_header_ret( - read_header_ertr::ready_future_marker{}, - std::nullopt); - } + co_await device->read(device->get_shard_journal_start(), bptr); + + bufferlist bl; + bl.append(bptr); + auto bp = bl.cbegin(); + cbj_header_t cbj_header; + bool decode_failed = false; + try { + decode(cbj_header, bp); + } catch (ceph::buffer::error &e) { + ERROR("unable to read header block"); + decode_failed = true; + } + if (decode_failed) { + co_return co_await read_header_ret(crimson::ct_error::enoent::make()); + } + if (!device->is_end_to_end_data_protection()) { + auto bliter = bl.cbegin(); + auto test_crc = bliter.crc32c( + ceph::encoded_sizeof_bounded(), + -1); + ceph_le32 recorded_crc_le; + decode(recorded_crc_le, bliter); + uint32_t recorded_crc = recorded_crc_le; + if (test_crc != recorded_crc) { + ERROR("error, header crc mismatch."); + co_return std::nullopt; } - return read_header_ret( - read_header_ertr::ready_future_marker{}, - std::make_pair(cbj_header, bl) - ); - }); + } + co_return std::make_pair(cbj_header, bl); } CircularJournalSpace::submit_ertr::future<> @@ -231,7 +224,7 @@ CircularJournalSpace::write_header() assert(bl.length() < get_block_size()); bufferptr bp = bufferptr(ceph::buffer::create_page_aligned(get_block_size())); iter.copy(bl.length(), bp.c_str()); - return device->write(device->get_shard_journal_start(), std::move(bp) + co_await device->write(device->get_shard_journal_start(), std::move(bp) ).handle_error( submit_ertr::pass_further{}, crimson::ct_error::assert_all{ "Invalid error device->write" }