[RFC 3/5] mm/memcontrol: do not scan anon pages if memsw limit is hit

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Zeng Jingxiang <linuszeng@xxxxxxxxxxx>

When memory recycling is triggered by the hard watermark of
memsw, anonymous pages do not want to be recycled any further.
This is consistent with the processing method of cgroup v2.

Signed-off-by: Zeng Jingxiang <linuszeng@xxxxxxxxxxx>
---
 mm/memcontrol.c | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index c1171fb2bfd6..623ebf610946 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5072,14 +5072,21 @@ void __mem_cgroup_uncharge_swap(swp_entry_t entry, unsigned int nr_pages)
 
 long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg)
 {
+	struct page_counter *pg_counter;
 	long nr_swap_pages = get_nr_swap_pages();
 
-	if (mem_cgroup_disabled() || do_memsw_account())
+	if (mem_cgroup_disabled())
 		return nr_swap_pages;
-	for (; !mem_cgroup_is_root(memcg); memcg = parent_mem_cgroup(memcg))
+	for (; !mem_cgroup_is_root(memcg); memcg = parent_mem_cgroup(memcg)) {
+		if (do_memsw_account())
+			pg_counter = &memcg->memsw;
+		else
+			pg_counter = &memcg->swap;
+
 		nr_swap_pages = min_t(long, nr_swap_pages,
-				      READ_ONCE(memcg->swap.max) -
-				      page_counter_read(&memcg->swap));
+				      READ_ONCE(pg_counter->max) -
+				      page_counter_read(pg_counter));
+	}
 	return nr_swap_pages;
 }
 
-- 
2.41.1





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux