blob: e59913b4d7239e2d8c6bced5ff6d85f1b23dae4a [file] [log] [blame]
From 574b131c0c739d0e270f72d6375b0b25b4c2307f Mon Sep 17 00:00:00 2001
From: Yu Zhao <yuzhao@google.com>
Date: Fri, 28 May 2021 12:35:18 -0600
Subject: [PATCH] CHROMIUM: mm: multi-gen LRU: don't use min_filelist_kbytes
The multi-gen lru doesn't need min_filelist_kbytes.
BUG=b:222766163
TEST=built
Signed-off-by: Yu Zhao <yuzhao@google.com>
Change-Id: I221ddc3d041a1d4b506427b9d0aa7306b27814c3
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/3948113
Commit-Queue: Yu Zhao <yuzhao@chromium.org>
Tested-by: Yu Zhao <yuzhao@chromium.org>
Reviewed-by: Brian Geffon <bgeffon@chromium.org>
---
include/linux/mm.h | 2 ++
kernel/sysctl.c | 2 +-
mm/low-mem-notify.c | 4 +++-
mm/vmscan.c | 22 ++++++++++++++++++++++
4 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 3d8a04c5bba6013954cc54cc6ec8aa7485a7a299..98737252b6071dc2f549b535d826ab4785560eba 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -3769,6 +3769,8 @@ unsigned long wp_shared_mapping_range(struct address_space *mapping,
extern int sysctl_nr_trim_pages;
extern int min_filelist_kbytes;
+extern int min_filelist_kbytes_handler(struct ctl_table *table, int write,
+ void *buf, size_t *len, loff_t *pos);
#ifdef CONFIG_PRINTK
void mem_dump_obj(void *object);
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index c0419063a0ce1ba48bdde6ea183ec7c53f9c9dcf..462e32404e797e646864749567d5b02d48a69eeb 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -2320,7 +2320,7 @@ static struct ctl_table vm_table[] = {
.data = &min_filelist_kbytes,
.maxlen = sizeof(min_filelist_kbytes),
.mode = 0644,
- .proc_handler = proc_dointvec,
+ .proc_handler = min_filelist_kbytes_handler,
},
#ifdef CONFIG_HAVE_ARCH_MMAP_RND_BITS
{
diff --git a/mm/low-mem-notify.c b/mm/low-mem-notify.c
index 3583dc43221d9fa09a900442ef73fc7d32a1dd76..23aa30cf2a6fd1a67369f18d4839c7dfd30a701b 100644
--- a/mm/low-mem-notify.c
+++ b/mm/low-mem-notify.c
@@ -33,6 +33,7 @@
#include <linux/stddef.h>
#include <linux/swap.h>
#include <linux/low-mem-notify.h>
+#include <linux/mm_inline.h>
#define MB (1 << 20)
@@ -66,7 +67,8 @@ static unsigned long get_available_file_mem(void)
global_node_page_state(NR_ACTIVE_FILE) +
global_node_page_state(NR_INACTIVE_FILE);
unsigned long dirty_mem = global_node_page_state(NR_FILE_DIRTY);
- unsigned long min_file_mem = min_filelist_kbytes >> (PAGE_SHIFT - 10);
+ unsigned long min_file_mem = lru_gen_enabled() ?
+ 0 : min_filelist_kbytes >> (PAGE_SHIFT - 10);
unsigned long clean_file_mem = file_mem > dirty_mem ?
file_mem - dirty_mem : 0;
/* Conservatively estimate the amount of available_file_mem */
diff --git a/mm/vmscan.c b/mm/vmscan.c
index ca84b5918ebe17aa158ada5fcefdeff260137baf..9129a0c93f55412f441e05af84db91097f7468d4 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -189,6 +189,28 @@ struct scan_control {
*/
int vm_swappiness = 60;
+int min_filelist_kbytes_handler(struct ctl_table *table, int write,
+ void *buf, size_t *len, loff_t *pos)
+{
+ size_t written;
+
+ if (!lru_gen_enabled() || write)
+ return proc_dointvec(table, write, buf, len, pos);
+
+ if (!*len || *pos) {
+ *len = 0;
+ return 0;
+ }
+
+ written = min_t(size_t, 2, *len);
+ memcpy(buf, "0\n", written);
+
+ *len = written;
+ *pos = written;
+
+ return 0;
+}
+
LIST_HEAD(shrinker_list);
DEFINE_MUTEX(shrinker_mutex);
DEFINE_SRCU(shrinker_srcu);
--
2.38.3