aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-rw-r--r--mm/memcontrol.c13
-rw-r--r--mm/vmscan.c2
2 files changed, 14 insertions, 1 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 1ff552e3722b..bcb38718e174 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -5748,6 +5748,19 @@ void mem_cgroup_uncharge_swap(swp_entry_t entry)
5748 rcu_read_unlock(); 5748 rcu_read_unlock();
5749} 5749}
5750 5750
5751long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg)
5752{
5753 long nr_swap_pages = get_nr_swap_pages();
5754
5755 if (!do_swap_account || !cgroup_subsys_on_dfl(memory_cgrp_subsys))
5756 return nr_swap_pages;
5757 for (; memcg != root_mem_cgroup; memcg = parent_mem_cgroup(memcg))
5758 nr_swap_pages = min_t(long, nr_swap_pages,
5759 READ_ONCE(memcg->swap.limit) -
5760 page_counter_read(&memcg->swap));
5761 return nr_swap_pages;
5762}
5763
5751/* for remember boot option*/ 5764/* for remember boot option*/
5752#ifdef CONFIG_MEMCG_SWAP_ENABLED 5765#ifdef CONFIG_MEMCG_SWAP_ENABLED
5753static int really_do_swap_account __initdata = 1; 5766static int really_do_swap_account __initdata = 1;
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 9a8556e49cd9..3be5f9db6c42 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2004,7 +2004,7 @@ static void get_scan_count(struct lruvec *lruvec, struct mem_cgroup *memcg,
2004 force_scan = true; 2004 force_scan = true;
2005 2005
2006 /* If we have no swap space, do not bother scanning anon pages. */ 2006 /* If we have no swap space, do not bother scanning anon pages. */
2007 if (!sc->may_swap || (get_nr_swap_pages() <= 0)) { 2007 if (!sc->may_swap || mem_cgroup_get_nr_swap_pages(memcg) <= 0) {
2008 scan_balance = SCAN_FILE; 2008 scan_balance = SCAN_FILE;
2009 goto out; 2009 goto out;
2010 } 2010 }