mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
24cf72518c
commit
ee993b135e
10
mm/vmscan.c
10
mm/vmscan.c
|
@ -929,18 +929,10 @@ static unsigned long isolate_lru_pages(unsigned long nr_to_scan,
|
|||
/* Check that we have not crossed a zone boundary. */
|
||||
if (unlikely(page_zone_id(cursor_page) != zone_id))
|
||||
continue;
|
||||
switch (__isolate_lru_page(cursor_page, mode, file)) {
|
||||
case 0:
|
||||
if (__isolate_lru_page(cursor_page, mode, file) == 0) {
|
||||
list_move(&cursor_page->lru, dst);
|
||||
nr_taken++;
|
||||
scan++;
|
||||
break;
|
||||
|
||||
case -EBUSY:
|
||||
/* else it is being freed elsewhere */
|
||||
list_move(&cursor_page->lru, src);
|
||||
default:
|
||||
break; /* ! on LRU or wrong list */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue