]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: switch co_routine in circular_journal_space 68544/head
authormyoungwon oh <ohmyoungwon@gmail.com>
Wed, 22 Apr 2026 10:15:53 +0000 (19:15 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Wed, 22 Apr 2026 10:17:15 +0000 (19:17 +0900)
Signed-off-by: Myoungwon Oh <ohmyoungwon@gmail.com>
src/crimson/os/seastore/journal/circular_journal_space.cc

index 2da3d1f1d229e8d88a786969a265ca1a642a3d7f..01023109b362c5dafb8cd906289455e10b6479ad 100644 (file)
@@ -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<cbj_header_t>(),
-       -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<cbj_header_t>(),
+      -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" }