From 3892ba1e8ea184af5a9cfd1822db8bb0834178ed Mon Sep 17 00:00:00 2001 From: KAMEZAWA Hiroyuki Date: Thu, 7 Feb 2008 00:14:11 -0800 Subject: [PATCH] --- yaml --- r: 83778 b: refs/heads/master c: ff7283fa3a66823933991ad55a558a3a01d5ab27 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/memcontrol.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index ca3642b16b1d..df3e9bd3e11d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ae41be374293e70e1ed441d986afcc6e744ef9d9 +refs/heads/master: ff7283fa3a66823933991ad55a558a3a01d5ab27 diff --git a/trunk/mm/memcontrol.c b/trunk/mm/memcontrol.c index 128f45c16fa6..e8493fb2d69e 100644 --- a/trunk/mm/memcontrol.c +++ b/trunk/mm/memcontrol.c @@ -250,7 +250,7 @@ unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, unsigned long scan; LIST_HEAD(pc_list); struct list_head *src; - struct page_cgroup *pc; + struct page_cgroup *pc, *tmp; if (active) src = &mem_cont->active_list; @@ -258,11 +258,18 @@ unsigned long mem_cgroup_isolate_pages(unsigned long nr_to_scan, src = &mem_cont->inactive_list; spin_lock(&mem_cont->lru_lock); - for (scan = 0; scan < nr_to_scan && !list_empty(src); scan++) { - pc = list_entry(src->prev, struct page_cgroup, lru); + scan = 0; + list_for_each_entry_safe_reverse(pc, tmp, src, lru) { + if (scan++ > nr_to_scan) + break; page = pc->page; VM_BUG_ON(!pc); + if (unlikely(!PageLRU(page))) { + scan--; + continue; + } + if (PageActive(page) && !active) { __mem_cgroup_move_lists(pc, true); scan--;