From 0166af472b540e7e210f6f4a5358b7a9b1dfa534 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sat, 3 Jun 2023 02:37:37 +0300 Subject: [PATCH] Kernel: DiskCache will try to shrink_to_fit after cache cleanup --- kernel/kernel/Storage/DiskCache.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/kernel/kernel/Storage/DiskCache.cpp b/kernel/kernel/Storage/DiskCache.cpp index c9ddf1b7a..89dfbfe7a 100644 --- a/kernel/kernel/Storage/DiskCache.cpp +++ b/kernel/kernel/Storage/DiskCache.cpp @@ -66,6 +66,7 @@ namespace Kernel cache_block.sectors[0].dirty = false; return {}; } + m_cache.pop_back(); } // We could not cache the sector @@ -119,6 +120,7 @@ namespace Kernel cache_block.sectors[0].dirty = true; return {}; } + m_cache.pop_back(); } // We could not allocate cache, so we must sync it to disk @@ -152,6 +154,8 @@ namespace Kernel released++; } + (void)m_cache.shrink_to_fit(); + return released; } @@ -176,6 +180,8 @@ namespace Kernel released++; } + (void)m_cache.shrink_to_fit(); + return released; } @@ -189,15 +195,14 @@ namespace Kernel uint8_t* temp_buffer = (uint8_t*)kmalloc(m_device.sector_size()); ASSERT(temp_buffer); - while (!m_cache.empty()) + for (auto& cache_block : m_cache) { - auto& cache_block = m_cache.back(); cache_block.sync(m_device); Heap::get().release_page(cache_block.paddr); - m_cache.pop_back(); } - } + m_cache.clear(); + } void DiskCache::CacheBlock::sync(StorageDevice& device) {