diff options
author | KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> | 2009-06-16 18:33:24 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-16 22:47:46 -0400 |
commit | ee993b135ec75a93bd5c45e636bb210d2975159b (patch) | |
tree | edc7ca495c20b0ecd9c78ce22dad121c01459511 | |
parent | 24cf72518c79cdcda486ed26074ff8151291cf65 (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.c | 10 |
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 | } |