ed1787d
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
ed1787d
From: Zhang Boyang <zhangboyang.id@gmail.com>
ed1787d
Date: Sat, 15 Oct 2022 22:15:11 +0800
ed1787d
Subject: [PATCH] mm: Try invalidate disk caches last when out of memory
ed1787d
ed1787d
Every heap grow will cause all disk caches invalidated which decreases
ed1787d
performance severely. This patch moves disk cache invalidation code to
ed1787d
the last of memory squeezing measures. So, disk caches are released only
ed1787d
when there are no other ways to get free memory.
ed1787d
ed1787d
Signed-off-by: Zhang Boyang <zhangboyang.id@gmail.com>
ed1787d
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
ed1787d
Reviewed-by: Patrick Steinhardt <ps@pks.im>
ed1787d
(cherry picked from commit 17975d10a80e2457e5237f87fa58a7943031983e)
ed1787d
---
ed1787d
 grub-core/kern/mm.c | 14 +++++++-------
ed1787d
 1 file changed, 7 insertions(+), 7 deletions(-)
ed1787d
ed1787d
diff --git a/grub-core/kern/mm.c b/grub-core/kern/mm.c
ed1787d
index f2e27f263b..da1ac9427c 100644
ed1787d
--- a/grub-core/kern/mm.c
ed1787d
+++ b/grub-core/kern/mm.c
ed1787d
@@ -443,12 +443,6 @@ grub_memalign (grub_size_t align, grub_size_t size)
ed1787d
   switch (count)
ed1787d
     {
ed1787d
     case 0:
ed1787d
-      /* Invalidate disk caches.  */
ed1787d
-      grub_disk_cache_invalidate_all ();
ed1787d
-      count++;
ed1787d
-      goto again;
ed1787d
-
ed1787d
-    case 1:
ed1787d
       /* Request additional pages, contiguous */
ed1787d
       count++;
ed1787d
 
ed1787d
@@ -458,7 +452,7 @@ grub_memalign (grub_size_t align, grub_size_t size)
ed1787d
 
ed1787d
       /* fallthrough  */
ed1787d
 
ed1787d
-    case 2:
ed1787d
+    case 1:
ed1787d
       /* Request additional pages, anything at all */
ed1787d
       count++;
ed1787d
 
ed1787d
@@ -474,6 +468,12 @@ grub_memalign (grub_size_t align, grub_size_t size)
ed1787d
 
ed1787d
       /* fallthrough */
ed1787d
 
ed1787d
+    case 2:
ed1787d
+      /* Invalidate disk caches.  */
ed1787d
+      grub_disk_cache_invalidate_all ();
ed1787d
+      count++;
ed1787d
+      goto again;
ed1787d
+
ed1787d
     default:
ed1787d
       break;
ed1787d
     }