aboutsummaryrefslogtreecommitdiffstats
path: root/mm/vmscan.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/vmscan.c')
-rw-r--r--mm/vmscan.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index cec8081bbd95..130ad0239f52 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1051,7 +1051,7 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
1051 1051
1052 /* Check that we have not crossed a zone boundary. */ 1052 /* Check that we have not crossed a zone boundary. */
1053 if (unlikely(page_zone_id(cursor_page) != zone_id)) 1053 if (unlikely(page_zone_id(cursor_page) != zone_id))
1054 continue; 1054 break;
1055 1055
1056 /* 1056 /*
1057 * If we don't have enough swap space, reclaiming of 1057 * 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,
1059 * pointless. 1059 * pointless.
1060 */ 1060 */
1061 if (nr_swap_pages <= 0 && PageAnon(cursor_page) && 1061 if (nr_swap_pages <= 0 && PageAnon(cursor_page) &&
1062 !PageSwapCache(cursor_page)) 1062 !PageSwapCache(cursor_page))
1063 continue; 1063 break;
1064 1064
1065 if (__isolate_lru_page(cursor_page, mode, file) == 0) { 1065 if (__isolate_lru_page(cursor_page, mode, file) == 0) {
1066 list_move(&cursor_page->lru, dst); 1066 list_move(&cursor_page->lru, dst);
@@ -1071,11 +1071,16 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
1071 nr_lumpy_dirty++; 1071 nr_lumpy_dirty++;
1072 scan++; 1072 scan++;
1073 } else { 1073 } else {
1074 if (mode == ISOLATE_BOTH && 1074 /* the page is freed already. */
1075 page_count(cursor_page)) 1075 if (!page_count(cursor_page))
1076 nr_lumpy_failed++; 1076 continue;
1077 break;
1077 } 1078 }
1078 } 1079 }
1080
1081 /* If we break out of the loop above, lumpy reclaim failed */
1082 if (pfn < end_pfn)
1083 nr_lumpy_failed++;
1079 } 1084 }
1080 1085
1081 *scanned = scan; 1086 *scanned = scan;