]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/lba_manager: add the interface method to remove
authorXuehan Xu <xuxuehan@qianxin.com>
Fri, 22 Aug 2025 07:58:08 +0000 (07:58 +0000)
committerXuehan Xu <xuxuehan@qianxin.com>
Sun, 24 Aug 2025 04:12:29 +0000 (04:12 +0000)
indirect mapping without touching the corresponding direct one

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/lba/btree_lba_manager.h
src/crimson/os/seastore/lba_manager.h
src/crimson/os/seastore/transaction_manager.cc
src/crimson/os/seastore/transaction_manager.h

index c24d89b73e157c5bcb9572fc1d705fb922d03a86..e91dc10270686de53118992c1a3ae9203a4c8a6f 100644 (file)
@@ -225,6 +225,23 @@ public:
     });
   }
 
+  ref_ret remove_indirect_mapping_only(
+    Transaction &t,
+    LBAMapping mapping) final {
+    assert(mapping.is_viewable());
+    assert(mapping.is_indirect());
+    return seastar::do_with(
+      std::move(mapping),
+      [&t, this](auto &mapping) {
+      return update_refcount(t, mapping.indirect_cursor.get(), -1
+      ).si_then([](auto res) {
+       return ref_iertr::make_ready_future<
+         ref_update_result_t>(ref_update_result_t{
+           std::move(res), std::nullopt});
+      });
+    });
+  }
+
   ref_ret remove_mapping(
     Transaction &t,
     LBAMapping mapping) final {
index e6567b059040eb8392c12900e437ca567d0bc766..c551e5ea21f3cefb58e0fa6512e445c6539da34f 100644 (file)
@@ -184,6 +184,19 @@ public:
     Transaction &t,
     LBAMapping mapping) = 0;
 
+  /*
+   * remove_indirect_mapping_only
+   *
+   * Remove the indirect mapping without touch the corresponding
+   * direct one.
+   *
+   * @return returns the information about the removed
+   * indirect mapping.
+   */
+  virtual ref_ret remove_indirect_mapping_only(
+    Transaction &t,
+    LBAMapping mapping) = 0;
+
   /**
    * Increments ref count on extent
    *
index 454d01fc45078f97a1425c675d8621425ce9f8fe..82532a565744457d70c4614569c8986c193cb057 100644 (file)
@@ -248,6 +248,18 @@ TransactionManager::remove(
   });
 }
 
+TransactionManager::ref_iertr::future<LBAMapping>
+TransactionManager::_remove_indirect_mapping_only(
+  Transaction &t,
+  LBAMapping mapping)
+{
+  return lba_manager->remove_indirect_mapping_only(
+    t, std::move(mapping)
+  ).si_then([](auto result) {
+    return std::move(result.result.mapping);
+  });
+}
+
 TransactionManager::ref_iertr::future<
   TransactionManager::_remove_mapping_result_t>
 TransactionManager::_remove_indirect_mapping(
index 95ad4febd2b654ce1391654fe79be4ca3503c54e..2a35c7e34d10a6d2914b121e69405eb8ee824b40 100644 (file)
@@ -1380,6 +1380,10 @@ private:
   _remove_direct_mapping(
     Transaction &t,
     LBAMapping mapping);
+  ref_iertr::future<LBAMapping>
+  _remove_indirect_mapping_only(
+    Transaction &t,
+    LBAMapping mapping);
 
   rewrite_extent_ret rewrite_logical_extent(
     Transaction& t,