From 8d9dc699459f8e88498766c2c3b25f80e0768e8e Mon Sep 17 00:00:00 2001 From: Christian Ebner Date: Wed, 26 Mar 2025 11:03:29 +0100 Subject: [PATCH] tools: lru cache: tell if node was already present or newly inserted Add a boolean return type to LruCache::insert(), telling if the node was already present in the cache or if it was newly inserted. This will allow to use the LRU cache for garbage collection, where it is required to skip atime updates for chunks already marked in use. That improves phase 1 garbage collection performance by avoiding, multiple atime updates. Signed-off-by: Christian Ebner --- pbs-tools/src/lru_cache.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pbs-tools/src/lru_cache.rs b/pbs-tools/src/lru_cache.rs index 1befb1a0..9e011264 100644 --- a/pbs-tools/src/lru_cache.rs +++ b/pbs-tools/src/lru_cache.rs @@ -133,7 +133,7 @@ impl LruCache { /// Insert or update an entry identified by `key` with the given `value`. /// This entry is placed as the most recently used node at the head. - pub fn insert(&mut self, key: K, value: V) { + pub fn insert(&mut self, key: K, value: V) -> bool { match self.map.entry(key) { Entry::Occupied(mut o) => { // Node present, update value @@ -142,6 +142,7 @@ impl LruCache { let mut node = unsafe { Box::from_raw(node_ptr) }; node.value = value; let _node_ptr = Box::into_raw(node); + true } Entry::Vacant(v) => { // Node not present, insert a new one @@ -159,6 +160,7 @@ impl LruCache { if self.map.len() > self.capacity { self.pop_tail(); } + false } } }