blob: 269af2d153c66e2b8bd33ca8933aa3658987b9ba [file] [log] [blame]
From fb1a2ed4aaaaeaaac63089136b66322c1fd0f6a4 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 699d3850871d84b483e8791410b625f06d30fd50..91ec4f39e7731a79ea90dc864000119a39080424 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -3420,6 +3420,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 bb7f6a2928960d66674f598e36a6e9a0e1dd095e..b17af43424d7d3b93cbb9be57a05795d22b84673 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -2458,7 +2458,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 5c2430679548ac25f35567dedb027f004742b53a..796a730c1ca27c762e610a6165dc4d14c57de3b6 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -203,6 +203,28 @@ static void set_task_reclaim_state(struct task_struct *task,
task->reclaim_state = rs;
}
+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);
DECLARE_RWSEM(shrinker_rwsem);
--
2.38.1.584.g0f3c55d4c2-goog