]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/btree: allow backref extents to be loaded from disk without initi...
authorXuehan Xu <xxhdx1985126@gmail.com>
Tue, 29 Mar 2022 06:48:48 +0000 (14:48 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Sat, 7 May 2022 05:13:38 +0000 (13:13 +0800)
For the purpose of higher space reclaim perf, we load backref extents by
parallelly invoking Cache::get_extent_by_type, which means loaded backref
extents won't be initialized

Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/os/seastore/btree/fixed_kv_btree.h

index 6b4f0b1a3872133f6ee12e0d96b229ff2f505625..c04d91424094437866d838bb76190ca811bfed24 100644 (file)
@@ -1018,8 +1018,11 @@ private:
         offset,
         *ret);
       // This can only happen during init_cached_extent
+      // or when backref extent being rewritten by gc space reclaiming
       if (c.pins && !ret->is_pending() && !ret->pin.is_linked()) {
-        assert(ret->is_dirty());
+        assert(ret->is_dirty()
+          || (is_backref_node(ret->get_type())
+            && ret->is_clean()));
         init_internal(*ret);
       }
       auto meta = ret->get_meta();
@@ -1075,8 +1078,11 @@ private:
         offset,
         *ret);
       // This can only happen during init_cached_extent
+      // or when backref extent being rewritten by gc space reclaiming
       if (c.pins && !ret->is_pending() && !ret->pin.is_linked()) {
-        assert(ret->is_dirty());
+        assert(ret->is_dirty()
+          || (is_backref_node(ret->get_type())
+            && ret->is_clean()));
         init_leaf(*ret);
       }
       auto meta = ret->get_meta();