aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>2009-06-16 18:33:24 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-06-16 22:47:46 -0400
commitee993b135ec75a93bd5c45e636bb210d2975159b (patch)
treeedc7ca495c20b0ecd9c78ce22dad121c01459511
parent24cf72518c79cdcda486ed26074ff8151291cf65 (diff)
mm: fix lumpy reclaim lru handling at isolate_lru_pages
At lumpy reclaim, a page failed to be taken by __isolate_lru_page() can be pushed back to "src" list by list_move(). But the page may not be from "src" list. This pushes the page back to wrong LRU. And list_move() itself is unnecessary because the page is not on top of LRU. Then, leave it as it is if __isolate_lru_page() fails. Reviewed-by: Minchan Kim <minchan.kim@gmail.com> Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Acked-by: Mel Gorman <mel@csn.ul.ie> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--mm/vmscan.c10
1 files changed, 1 insertions, 9 deletions
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 3018ad756133..4139aa52b941 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -929,18 +929,10 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
929 /* Check that we have not crossed a zone boundary. */ 929 /* Check that we have not crossed a zone boundary. */
930 if (unlikely(page_zone_id(cursor_page) != zone_id)) 930 if (unlikely(page_zone_id(cursor_page) != zone_id))
931 continue; 931 continue;
932 switch (__isolate_lru_page(cursor_page, mode, file)) { 932 if (__isolate_lru_page(cursor_page, mode, file) == 0) {
933 case 0:
934 list_move(&cursor_page->lru, dst); 933 list_move(&cursor_page->lru, dst);
935 nr_taken++; 934 nr_taken++;
936 scan++; 935 scan++;
937 break;
938
939 case -EBUSY:
940 /* else it is being freed elsewhere */
941 list_move(&cursor_page->lru, src);
942 default:
943 break; /* ! on LRU or wrong list */
944 } 936 }
945 } 937 }
946 } 938 }