]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cache/LRU: account the empty extent when adding it to LRU 62969/head
authorZhang Song <zhangsong02@qianxin.com>
Fri, 25 Apr 2025 08:55:34 +0000 (16:55 +0800)
committerZhang Song <zhangsong02@qianxin.com>
Fri, 25 Apr 2025 09:00:51 +0000 (17:00 +0800)
Don't update num_extents when a partial extent is already in LRU.

Fixes: https://tracker.ceph.com/issues/69986
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/seastore_types.h

index 8e597cafd1160d0884df080e2767dbd8ada840f6..71ba514e6578e106f6a712c029dceda4ba2d37fb 100644 (file)
@@ -1642,7 +1642,6 @@ private:
         // absent, add to top (back)
         if (extent_loaded_length > 0) {
           current_size += extent_loaded_length;
-          get_by_ext(sizes_by_ext, extent.get_type()).account_in(extent_loaded_length);
           overall_io.in_sizes.account_in(extent_loaded_length);
           if (p_src) {
             get_by_ext(
@@ -1652,6 +1651,7 @@ private:
           }
         } // else: the extent isn't loaded upon touch_extent()/on_cache(),
           //       account the io later in increase_cached_size() upon read_extent()
+       get_by_ext(sizes_by_ext, extent.get_type()).account_in(extent_loaded_length);
         intrusive_ptr_add_ref(&extent);
         lru.push_back(extent);
 
@@ -1670,7 +1670,7 @@ private:
         // present, increase size
         assert(lru.size() > 0);
         current_size += increased_length;
-        get_by_ext(sizes_by_ext, extent.get_type()).account_in(increased_length);
+        get_by_ext(sizes_by_ext, extent.get_type()).account_parital_in(increased_length);
         overall_io.in_sizes.account_in(increased_length);
         if (p_src) {
           get_by_ext(
index 29bd7b9c85f12a87f0f82cb6ceb488e502bac9ac..1256c939ebf10eeaaf85bdf7b277f39089d59a74 100644 (file)
@@ -2853,6 +2853,10 @@ struct cache_size_stats_t {
     ++num_extents;
   }
 
+  void account_parital_in(extent_len_t sz) {
+    size += sz;
+  }
+
   void account_out(extent_len_t sz) {
     assert(size >= sz);
     assert(num_extents > 0);