diff --git a/src/overlaybd/cache/full_file_cache/cache_pool.cpp b/src/overlaybd/cache/full_file_cache/cache_pool.cpp index 25761dbc..006d860f 100644 --- a/src/overlaybd/cache/full_file_cache/cache_pool.cpp +++ b/src/overlaybd/cache/full_file_cache/cache_pool.cpp @@ -203,13 +203,21 @@ void FileCachePool::eviction() { evictByCache = totalUsed_ - waterMark_; } - auto actualEvict = static_cast(std::max(evictByCache, evictByDisk)); + auto actualEvict = std::min( + static_cast(std::max(evictByCache, evictByDisk)), + totalUsed_ + ); + if (actualEvict <= 0) { return; } isFull_ = true; + if (!lru_.empty() && !exit_) { + LOG_AUDIT("eviction", VALUE(actualEvict), VALUE(evictByCache), VALUE(evictByDisk), VALUE(totalUsed_)); + } + while (actualEvict > 0 && !lru_.empty() && !exit_) { auto fileIter = lru_.back(); const auto &fileName = fileIter->first;