From a7061d0eaf93955655e9c2473b01b507ece40796 Mon Sep 17 00:00:00 2001 From: KOSAKI Motohiro Date: Tue, 26 Oct 2010 14:21:44 -0700 Subject: [PATCH] --- yaml --- r: 217461 b: refs/heads/master c: 08fc468f4eaf6683bae5bdb94743a09d8630cb80 h: refs/heads/master i: 217459: 275cb8a5f2c4e7dabb57979e88fbb8a920a58694 v: v3 --- [refs] | 2 +- trunk/mm/vmscan.c | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index b8522673d31e..8d17136442d0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 47185052165a4c5de0a461018238375dd982c2ec +refs/heads/master: 08fc468f4eaf6683bae5bdb94743a09d8630cb80 diff --git a/trunk/mm/vmscan.c b/trunk/mm/vmscan.c index cec8081bbd95..130ad0239f52 100644 --- a/trunk/mm/vmscan.c +++ b/trunk/mm/vmscan.c @@ -1051,7 +1051,7 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, /* Check that we have not crossed a zone boundary. */ if (unlikely(page_zone_id(cursor_page) != zone_id)) - continue; + break; /* * If we don't have enough swap space, reclaiming of @@ -1059,8 +1059,8 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, * pointless. */ if (nr_swap_pages <= 0 && PageAnon(cursor_page) && - !PageSwapCache(cursor_page)) - continue; + !PageSwapCache(cursor_page)) + break; if (__isolate_lru_page(cursor_page, mode, file) == 0) { list_move(&cursor_page->lru, dst); @@ -1071,11 +1071,16 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, nr_lumpy_dirty++; scan++; } else { - if (mode == ISOLATE_BOTH && - page_count(cursor_page)) - nr_lumpy_failed++; + /* the page is freed already. */ + if (!page_count(cursor_page)) + continue; + break; } } + + /* If we break out of the loop above, lumpy reclaim failed */ + if (pfn < end_pfn) + nr_lumpy_failed++; } *scanned = scan;