]> 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 <igor.fedotov@croit.io>
Fri, 13 Jan 2023 12:05:42 +0000 (15:05 +0300)
Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
src/os/bluestore/BlueStore.cc

index fe268293d75ab6a4c0b503395380e1ac49ffbc42..390f286774aed3b5f0dda378a6cdef124945ff01 100644 (file)
@@ -1172,22 +1172,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);
-      }
       *(o->cache_age_bin) -= 1;
       if (o->pin_nref > 1) {
         dout(20) << __func__ << " " << this << " " << " " << " " << o->oid << dendl;