aboutsummaryrefslogtreecommitdiffstats
path: root/mm/memcontrol.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r--mm/memcontrol.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 6ef5c53dffcb..9e0f05efd114 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -829,6 +829,32 @@ void mem_cgroup_del_lru(struct page *page)
829 mem_cgroup_del_lru_list(page, page_lru(page)); 829 mem_cgroup_del_lru_list(page, page_lru(page));
830} 830}
831 831
832/*
833 * Writeback is about to end against a page which has been marked for immediate
834 * reclaim. If it still appears to be reclaimable, move it to the tail of the
835 * inactive list.
836 */
837void mem_cgroup_rotate_reclaimable_page(struct page *page)
838{
839 struct mem_cgroup_per_zone *mz;
840 struct page_cgroup *pc;
841 enum lru_list lru = page_lru(page);
842
843 if (mem_cgroup_disabled())
844 return;
845
846 pc = lookup_page_cgroup(page);
847 /* unused or root page is not rotated. */
848 if (!PageCgroupUsed(pc))
849 return;
850 /* Ensure pc->mem_cgroup is visible after reading PCG_USED. */
851 smp_rmb();
852 if (mem_cgroup_is_root(pc->mem_cgroup))
853 return;
854 mz = page_cgroup_zoneinfo(pc);
855 list_move_tail(&pc->lru, &mz->lists[lru]);
856}
857
832void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru) 858void mem_cgroup_rotate_lru_list(struct page *page, enum lru_list lru)
833{ 859{
834 struct mem_cgroup_per_zone *mz; 860 struct mem_cgroup_per_zone *mz;