Commit ee993b13 authored by KAMEZAWA Hiroyuki's avatar KAMEZAWA Hiroyuki Committed by Linus Torvalds

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: default avatarMinchan Kim <minchan.kim@gmail.com>
Reviewed-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Acked-by: default avatarMel Gorman <mel@csn.ul.ie>
Signed-off-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 24cf7251
...@@ -929,18 +929,10 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan, ...@@ -929,18 +929,10 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
/* Check that we have not crossed a zone boundary. */ /* Check that we have not crossed a zone boundary. */
if (unlikely(page_zone_id(cursor_page) != zone_id)) if (unlikely(page_zone_id(cursor_page) != zone_id))
continue; continue;
switch (__isolate_lru_page(cursor_page, mode, file)) { if (__isolate_lru_page(cursor_page, mode, file) == 0) {
case 0:
list_move(&cursor_page->lru, dst); list_move(&cursor_page->lru, dst);
nr_taken++; nr_taken++;
scan++; scan++;
break;
case -EBUSY:
/* else it is being freed elsewhere */
list_move(&cursor_page->lru, src);
default:
break; /* ! on LRU or wrong list */
} }
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment