]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: reserve region in LBABtree when touching onode
authorZhang Song <zhangsong02@qianxin.com>
Wed, 11 Jun 2025 04:04:25 +0000 (12:04 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Sun, 24 May 2026 04:06:20 +0000 (12:06 +0800)
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/object_data_handler.cc
src/crimson/os/seastore/object_data_handler.h
src/crimson/os/seastore/seastore.cc

index a9932b0dbd8b7eb92693ffca48b102e91b551583..7cca29f93be1fafade8f145f098224e976f2208d 100644 (file)
@@ -409,8 +409,9 @@ ObjectDataHandler::clone_ret do_clonerange(
     data.merge_tail(ctx.tm.get_block_size());
     auto extents = co_await ctx.tm.alloc_data_extents<ObjectDataBlock>(
       ctx.t,
-      (overwrite_range.aligned_end - ctx.tm.get_block_size()
-       ).checked_to_laddr(),
+      laddr_hint_t::create_as_fixed(
+       (overwrite_range.aligned_end - ctx.tm.get_block_size()
+        ).checked_to_laddr()),
       ctx.tm.get_block_size(),
       std::move(write_pos)
     ).handle_error_interruptible(
@@ -1379,6 +1380,16 @@ ObjectDataHandler::zero_ret ObjectDataHandler::zero(
     });
 }
 
+ObjectDataHandler::touch_ret
+ObjectDataHandler::touch(context_t ctx)
+{
+  return with_object_data(ctx, [this, ctx](auto &obj_data) {
+    return prepare_data_reservation(
+      ctx, obj_data, max_object_size
+    ).discard_result();
+  });
+}
+
 ObjectDataHandler::write_ret ObjectDataHandler::write(
   context_t ctx,
   objaddr_t offset,
index 73c0953668aaa89a840d521341e13141165afc0d..49b7804dd9d2ff406fa3378d739713dadb83a2cb 100644 (file)
@@ -346,6 +346,10 @@ public:
     Onode *d_onode = nullptr; // The desination node in case of clone
   };
 
+  using touch_iertr = base_iertr;
+  using touch_ret = touch_iertr::future<>;
+  touch_ret touch(context_t ctx);
+
   /// Writes bl to [offset, offset + bl.length())
   using write_iertr = base_iertr;
   using write_ret = write_iertr::future<>;
index 02c4d952652582bb718ef19882d15ffc3878bf40..638e061e96b18c62205c670b57f467b880f4bd48 100644 (file)
@@ -2140,7 +2140,12 @@ SeaStore::Shard::_touch(
   internal_context_t &ctx,
   Onode &onode)
 {
-  return tm_iertr::now();
+  auto objhandler = ObjectDataHandler(max_object_size);
+  co_await objhandler.touch(ObjectDataHandler::context_t{
+    *transaction_manager,
+    *ctx.transaction,
+    onode
+  });
 }
 
 SeaStore::Shard::tm_ret