From 8180211431c6541a2aa5f2f076254e762cb3316f Mon Sep 17 00:00:00 2001 From: dylanbobb Date: Sun, 14 Aug 2022 23:08:22 -0400 Subject: [PATCH] Kernel: Release 1 page instead of all pages when starved for pages Previously, when starved for pages, *all* clean file-backed memory would be released, which is quite excessive. This patch instead releases just 1 page, since only 1 page is needed to satisfy the request to `allocate_physical_page()` --- Kernel/Memory/MemoryManager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Kernel/Memory/MemoryManager.cpp b/Kernel/Memory/MemoryManager.cpp index ff45405fce..881422cf52 100644 --- a/Kernel/Memory/MemoryManager.cpp +++ b/Kernel/Memory/MemoryManager.cpp @@ -949,8 +949,7 @@ ErrorOr> MemoryManager::allocate_physical_page(Shoul if (!vmobject.is_inode()) return IterationDecision::Continue; auto& inode_vmobject = static_cast(vmobject); - // FIXME: It seems excessive to release *all* clean pages from the inode when we only need one. - if (auto released_page_count = inode_vmobject.release_all_clean_pages()) { + if (auto released_page_count = inode_vmobject.try_release_clean_pages(1)) { dbgln("MM: Clean inode release saved the day! Released {} pages from InodeVMObject", released_page_count); page = find_free_physical_page(false); VERIFY(page);