From: Igor Fedotov Date: Wed, 7 Dec 2022 16:22:02 +0000 (+0300) Subject: os/bluestore: simplify onode cache trimming X-Git-Tag: v18.1.0~404^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5aaa2e025311fb7156c9ab0af02a98b3a1db9c8f;p=ceph.git os/bluestore: simplify onode cache trimming Signed-off-by: Igor Fedotov --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index fe268293d75a..390f286774ae 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -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;