From 5e840a20b8de534af23a5ad5bac65566423b2cb8 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 20 Aug 2020 14:23:14 -0700 Subject: [PATCH] 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 --- src/crimson/os/seastore/cache.h | 11 +++++++++++ .../seastore/lba_manager/btree/btree_lba_manager.cc | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) 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(); });