From 884d986bd62ec4fe080b28560deef011eb28f43a Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sat, 3 Jun 2023 02:36:20 +0300 Subject: [PATCH] Kernel: DiskCache won't crash when running out of kmalloc memory --- kernel/kernel/Storage/DiskCache.cpp | 36 ++++++++++++++++------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/kernel/kernel/Storage/DiskCache.cpp b/kernel/kernel/Storage/DiskCache.cpp index 1ee990f795..c9ddf1b7ae 100644 --- a/kernel/kernel/Storage/DiskCache.cpp +++ b/kernel/kernel/Storage/DiskCache.cpp @@ -55,15 +55,17 @@ namespace Kernel } // We try to allocate new cache block for this sector - TRY(m_cache.emplace_back()); - if (paddr_t paddr = Heap::get().take_free_page()) + if (!m_cache.emplace_back().is_error()) { - auto& cache_block = m_cache.back(); - cache_block.paddr = paddr; - cache_block.write_sector(m_device, 0, buffer); - cache_block.sectors[0].sector = sector; - cache_block.sectors[0].dirty = false; - return {}; + if (paddr_t paddr = Heap::get().take_free_page()) + { + auto& cache_block = m_cache.back(); + cache_block.paddr = paddr; + cache_block.write_sector(m_device, 0, buffer); + cache_block.sectors[0].sector = sector; + cache_block.sectors[0].dirty = false; + return {}; + } } // We could not cache the sector @@ -106,15 +108,17 @@ namespace Kernel } // We try to allocate new cache block - TRY(m_cache.emplace_back()); - if (paddr_t paddr = Heap::get().take_free_page()) + if (!m_cache.emplace_back().is_error()) { - auto& cache_block = m_cache.back(); - cache_block.paddr = paddr; - cache_block.write_sector(m_device, 0, buffer); - cache_block.sectors[0].sector = sector; - cache_block.sectors[0].dirty = true; - return {}; + if (paddr_t paddr = Heap::get().take_free_page()) + { + auto& cache_block = m_cache.back(); + cache_block.paddr = paddr; + cache_block.write_sector(m_device, 0, buffer); + cache_block.sectors[0].sector = sector; + cache_block.sectors[0].dirty = true; + return {}; + } } // We could not allocate cache, so we must sync it to disk