]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/lba_manager: drop from cache directly during replay if dead
authorSamuel Just <sjust@redhat.com>
Thu, 20 Aug 2020 21:23:14 +0000 (14:23 -0700)
committerSamuel Just <sjust@redhat.com>
Wed, 23 Sep 2020 22:13:51 +0000 (15:13 -0700)
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 <sjust@redhat.com>
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc

index ef80bf1961cbc7cfb63a04c04224c1bd9fa68903..cbb39a2191a8678550f646a2b9050029579b12dc 100644 (file)
@@ -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);
index 012b1ba61e6e5ad019a44d3211469a9b216663fc..b4eb5a7335877698a8191fe01275305e07f3944a 100644 (file)
@@ -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();
            });