From 27657d6c80a633a4fc562037ccb6986e9435b6ad Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Sat, 2 Jul 2016 16:29:41 +0800 Subject: [PATCH] os/bluestore: simplify buffer eviction logic of LRUCache Signed-off-by: xie xingguo --- src/os/bluestore/BlueStore.cc | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 3ec1533bfb746..8c2d5b12f49b7 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -507,20 +507,17 @@ void BlueStore::LRUCache::trim(uint64_t onode_max, uint64_t buffer_max) _audit("trim start"); // buffers - auto i = buffer_lru.end(); - if (buffer_size) { - assert(i != buffer_lru.begin()); - --i; - } while (buffer_size > buffer_max) { + auto i = buffer_lru.rbegin(); + if (i == buffer_lru.rend()) { + // stop if buffer_lru is now empty + break; + } + Buffer *b = &*i; assert(b->is_clean()); - auto p = b->space->buffer_map.find(b->offset); - if (i != buffer_lru.begin()) { - --i; - } dout(20) << __func__ << " rm " << *b << dendl; - b->space->_rm_buffer(p); + b->space->_rm_buffer(b); } // onodes -- 2.39.5