]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/.../transaction_manager: introduce resolve_cursor_to_mapping
authorSamuel Just <sjust@redhat.com>
Tue, 30 Sep 2025 17:52:45 +0000 (10:52 -0700)
committerSamuel Just <sjust@redhat.com>
Mon, 5 Jan 2026 21:14:55 +0000 (13:14 -0800)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/os/seastore/transaction_manager.cc
src/crimson/os/seastore/transaction_manager.h

index a38125bd57f853c2a2f65f32bddc38d79c4c0f62..9cdf5d6b423c40fbea9d002b001c47a78996726d 100644 (file)
@@ -409,6 +409,42 @@ TransactionManager::_remove(
   }
 }
 
+using resolve_cursor_to_mapping_iertr = base_iertr;
+resolve_cursor_to_mapping_iertr::future<LBAMapping>
+TransactionManager::resolve_cursor_to_mapping(
+  Transaction &t,
+  LBACursorRef cursor)
+{
+  LOG_PREFIX(TransactionManager::resolve_cursor_to_mapping);
+  if (cursor->is_end() || !cursor->is_indirect()) {
+    auto ret = co_await LBAMapping::create_direct(cursor).refresh();
+    DEBUGT("{} -> {}", t, *cursor, ret);
+    co_return ret;
+  }
+
+  assert(cursor->val->refcount == EXTENT_DEFAULT_REF_COUNT);
+  assert(cursor->val->checksum == 0);
+
+  auto direct_cursors = co_await lba_manager->get_cursors(
+    t,
+    cursor->get_intermediate_key(),
+    cursor->get_length()
+  );
+
+  ceph_assert(direct_cursors.size() == 1);
+  auto& direct_cursor = direct_cursors.front();
+  auto intermediate_key = cursor->get_intermediate_key();
+  assert(!direct_cursor->is_indirect());
+  assert(direct_cursor->get_laddr() <= intermediate_key);
+  assert(direct_cursor->get_laddr() + direct_cursor->get_length()
+        >= intermediate_key + cursor->get_length());
+  auto ret = co_await LBAMapping::create_indirect(
+    std::move(direct_cursor),
+    cursor).refresh();
+  DEBUGT("{} -> {}", t, *cursor, ret);
+  co_return ret;
+}
+
 TransactionManager::refs_ret TransactionManager::remove(
   Transaction &t,
   std::vector<laddr_t> offsets)
index 816b760fe2845eb5151d10f08221c7e14b21a7a4..9fb19caf72b687e4f27cd792550bfae9a4626a0c 100644 (file)
@@ -1155,6 +1155,12 @@ private:
 
   shard_stats_t& shard_stats;
 
+  using resolve_cursor_to_mapping_iertr = base_iertr;
+  resolve_cursor_to_mapping_iertr::future<LBAMapping>
+  resolve_cursor_to_mapping(
+    Transaction &t,
+    LBACursorRef cursor);
+
   using LBALeafNode = lba::LBALeafNode;
   struct unlinked_child_t {
     LBAMapping mapping;