From: Samuel Just Date: Thu, 20 Aug 2020 21:23:14 +0000 (-0700) Subject: crimson/os/seastore/lba_manager: drop from cache directly during replay if dead X-Git-Tag: v17.0.0~1015^2~21 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=5e840a20b8de534af23a5ad5bac65566423b2cb8;p=ceph-ci.git crimson/os/seastore/lba_manager: drop from cache directly during replay if dead Dead extents can't go through the normal retire_extent path as they don't have valid pins or other elements of a real extent. Instead, simply drop them on the floor directly. Signed-off-by: Samuel Just --- diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index ef80bf1961c..cbb39a2191a 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -85,6 +85,17 @@ public: Cache(SegmentManager &segment_manager); ~Cache(); + /** + * drop_from_cache + * + * Drop extent from cache. Intended for use when + * ref refers to a logically dead extent as during + * replay. + */ + void drop_from_cache(CachedExtentRef ref) { + remove_extent(ref); + } + /// Declare ref retired in t void retire_extent(Transaction &t, CachedExtentRef ref) { t.add_to_retired_set(ref); diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc index 012b1ba61e6..b4eb5a73358 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc @@ -259,7 +259,7 @@ BtreeLBAManager::init_cached_extent_ret BtreeLBAManager::init_cached_extent( } else { // e is obsolete logger().debug("init_cached_extent: {} obsolete", *e); - cache.retire_extent(t, e); + cache.drop_from_cache(e); } return init_cached_extent_ertr::now(); }); @@ -279,12 +279,12 @@ BtreeLBAManager::init_cached_extent_ret BtreeLBAManager::init_cached_extent( } else { // paddr doesn't match, remapped, obsolete logger().debug("init_cached_extent: {} obsolete", *logn); - cache.retire_extent(t, logn); + cache.drop_from_cache(logn); } } else { // set of extents changed, obsolete logger().debug("init_cached_extent: {} obsolete", *logn); - cache.retire_extent(t, logn); + cache.drop_from_cache(logn); } return init_cached_extent_ertr::now(); });