]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: simplify onode cache trimming
authorIgor Fedotov <igor.fedotov@croit.io>
Wed, 7 Dec 2022 16:22:02 +0000 (19:22 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Fri, 10 Feb 2023 15:49:10 +0000 (18:49 +0300)
Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit 5aaa2e025311fb7156c9ab0af02a98b3a1db9c8f)

 Conflicts:
src/os/bluestore/BlueStore.cc
 <no backport for https://github.com/ceph/ceph/pull/43299>

src/os/bluestore/BlueStore.cc

index 135e6d6dc00e29718db23cd6bfe34f05fff6a75c..3a29368d1074b8b3f31f76e2c78e4bcb590d095c 100644 (file)
@@ -1105,22 +1105,17 @@ struct LruOnodeCacheShard : public BlueStore::OnodeCacheShard {
     if (new_size >= lru.size()) {
       return; // don't even try
     } 
-    uint64_t n = lru.size() - new_size;
-    auto p = lru.end();
-    ceph_assert(p != lru.begin());
-    --p;
-    ceph_assert(num >= n);
-    while (n-- > 0) {
-      BlueStore::Onode *o = &*p;
+    uint64_t n = num - new_size; // note: we might get empty LRU
+                                 // before n == 0 due to pinned
+                                 // entries. And hence being unable
+                                 // to reach new_size target.
+    while (n-- > 0 && lru.size() > 0) {
+      BlueStore::Onode *o = &lru.back();
+      lru.pop_back();
+
       dout(20) << __func__ << "  rm " << o->oid << " "
                << o->nref << " " << o->cached << dendl;
 
-      if (p != lru.begin()) {
-        lru.erase(p--);
-      } else {
-        ceph_assert(n == 0);
-        lru.erase(p);
-      }
       if (o->pin_nref > 1) {
         dout(20) << __func__ << " " << this << " " << " " << " " << o->oid << dendl;
       } else {