aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorAndrea Arcangeli <aarcange@redhat.com>2012-01-12 20:19:29 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2012-01-12 23:13:08 -0500
commit5013473152d1ac9d44d787fb02edda845fdf2cb3 (patch)
tree639d241cdc804f09d56caf8ff844e09291b99170 /mm
parentb16d3d5a5219d01e9be5e586e5d50fbf1ca955ea (diff)
mm: vmscan: check if we isolated a compound page during lumpy scan
Properly take into account if we isolated a compound page during the lumpy scan in reclaim and skip over the tail pages when encountered. This corrects the values given to the tracepoint for number of lumpy pages isolated and will avoid breaking the loop early if compound pages smaller than the requested allocation size are requested. [mgorman@suse.de: Updated changelog] Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Signed-off-by: Mel Gorman <mgorman@suse.de> Reviewed-by: Minchan Kim <minchan.kim@gmail.com> Reviewed-by: Rik van Riel <riel@redhat.com> Cc: Dave Jones <davej@redhat.com> Cc: Jan Kara <jack@suse.cz> Cc: Andy Isaacson <adi@hexapodia.org> Cc: Nai Xia <nai.xia@gmail.com> Cc: Johannes Weiner <jweiner@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/vmscan.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index a85a261bf8f..866ab27c52a 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1196,13 +1196,17 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
1196 break; 1196 break;
1197 1197
1198 if (__isolate_lru_page(cursor_page, mode, file) == 0) { 1198 if (__isolate_lru_page(cursor_page, mode, file) == 0) {
1199 unsigned int isolated_pages;
1200
1199 mem_cgroup_lru_del(cursor_page); 1201 mem_cgroup_lru_del(cursor_page);
1200 list_move(&cursor_page->lru, dst); 1202 list_move(&cursor_page->lru, dst);
1201 nr_taken += hpage_nr_pages(cursor_page); 1203 isolated_pages = hpage_nr_pages(cursor_page);
1202 nr_lumpy_taken++; 1204 nr_taken += isolated_pages;
1205 nr_lumpy_taken += isolated_pages;
1203 if (PageDirty(cursor_page)) 1206 if (PageDirty(cursor_page))
1204 nr_lumpy_dirty++; 1207 nr_lumpy_dirty += isolated_pages;
1205 scan++; 1208 scan++;
1209 pfn += isolated_pages - 1;
1206 } else { 1210 } else {
1207 /* 1211 /*
1208 * Check if the page is freed already. 1212 * Check if the page is freed already.