From: Matan Breizman Date: Wed, 18 Jan 2023 09:25:19 +0000 (+0000) Subject: common/intrusive_lru: Add is_referenced()/ is_unreferenced() X-Git-Tag: v19.0.0~1626^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e4c2b2667aa6b570f9a3683176287fb6f91525c2;p=ceph.git common/intrusive_lru: Add is_referenced()/ is_unreferenced() * Rename unreferenced() to mark_as_unreferenced() The logic remains the same. Use these new methods instead of the lru pointer for better readability. Signed-off-by: Matan Breizman --- diff --git a/src/common/intrusive_lru.h b/src/common/intrusive_lru.h index 2837f67984b..2dea8c80794 100644 --- a/src/common/intrusive_lru.h +++ b/src/common/intrusive_lru.h @@ -43,6 +43,12 @@ class intrusive_lru_base { intrusive_lru *lru = nullptr; public: + bool is_referenced() const { + return static_cast(lru); + } + bool is_unreferenced() const { + return !is_referenced(); + } boost::intrusive::set_member_hook<> set_hook; boost::intrusive::list_member_hook<> list_hook; @@ -96,7 +102,7 @@ class intrusive_lru { while (!unreferenced_list.empty() && lru_set.size() > lru_target_size) { auto &b = unreferenced_list.front(); - assert(!b.lru); + assert(b.is_unreferenced()); unreferenced_list.pop_front(); lru_set.erase_and_dispose( lru_set.iterator_to(b), @@ -106,21 +112,21 @@ class intrusive_lru { } void access(base_t &b) { - if (b.lru) + if (b.is_referenced()) return; unreferenced_list.erase(lru_list_t::s_iterator_to(b)); b.lru = this; } void insert(base_t &b) { - assert(!b.lru); + assert(b.is_unreferenced()); lru_set.insert(b); b.lru = this; evict(); } - void unreferenced(base_t &b) { - assert(b.lru); + void mark_as_unreferenced(base_t &b) { + assert(b.is_referenced()); unreferenced_list.push_back(b); b.lru = nullptr; evict(); @@ -187,7 +193,7 @@ void intrusive_ptr_release(intrusive_lru_base *p) { assert(p->use_count > 0); --p->use_count; if (p->use_count == 0) { - p->lru->unreferenced(*p); + p->lru->mark_as_unreferenced(*p); } }