]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: In rewrite_extent, do not resolve addr if address is RANDOM_BLOCK
authormyoungwon oh <ohmyoungwon@gmail.com>
Tue, 14 Feb 2023 09:22:24 +0000 (18:22 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Thu, 16 Feb 2023 13:39:52 +0000 (22:39 +0900)
Signed-off-by: Myoungwon Oh <myoungwon.oh@samsung.com>
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/btree/fixed_kv_btree.h

index e851720b1248f745cf144ee6465c8b6279344b15..779b2ad06b9c81d41f8bc01e376e5093f0c30c24 100644 (file)
@@ -806,10 +806,7 @@ public:
     op_context_t<node_key_t> c,
     CachedExtentRef e) {
     LOG_PREFIX(FixedKVBtree::rewrite_extent);
-    assert(e->get_type() == extent_types_t::LADDR_INTERNAL ||
-           e->get_type() == extent_types_t::LADDR_LEAF ||
-           e->get_type() == extent_types_t::BACKREF_INTERNAL ||
-           e->get_type() == extent_types_t::BACKREF_LEAF);
+    assert(is_lba_backref_node(e->get_type()));
     
     auto do_rewrite = [&](auto &fixed_kv_extent) {
       auto n_fixed_kv_extent = c.cache.template alloc_new_extent<
@@ -836,9 +833,13 @@ public:
        * Upon commit, these now block relative addresses will be interpretted
        * against the real final address.
        */
-      n_fixed_kv_extent->resolve_relative_addrs(
-        make_record_relative_paddr(0).block_relative_to(
-          n_fixed_kv_extent->get_paddr()));
+      if (!n_fixed_kv_extent->get_paddr().is_absolute()) {
+       // backend_type_t::SEGMENTED
+       assert(n_fixed_kv_extent->get_paddr().is_record_relative());
+       n_fixed_kv_extent->resolve_relative_addrs(
+         make_record_relative_paddr(0).block_relative_to(
+           n_fixed_kv_extent->get_paddr()));
+      } // else: backend_type_t::RANDOM_BLOCK
       
       SUBTRACET(
         seastore_fixedkv_tree,