mem-hotplug: call isolate_lru_page with elevated refcount
isolate_lru_page() must be called only with stable reference to page. So, let's grab normal page reference. Signed-off-by: Konstantin Khlebnikov <khlebnikov@openvz.org> Cc: Andi Kleen <andi@firstfloor.org> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Mel Gorman <mel@csn.ul.ie> Cc: Lee Schermerhorn <lee.schermerhorn@hp.com> Cc: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
22943ab116
Коммит
700c2a46e8
|
@ -706,7 +706,7 @@ do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
|
|||
if (!pfn_valid(pfn))
|
||||
continue;
|
||||
page = pfn_to_page(pfn);
|
||||
if (!page_count(page))
|
||||
if (!get_page_unless_zero(page))
|
||||
continue;
|
||||
/*
|
||||
* We can skip free pages. And we can only deal with pages on
|
||||
|
@ -714,6 +714,7 @@ do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
|
|||
*/
|
||||
ret = isolate_lru_page(page);
|
||||
if (!ret) { /* Success */
|
||||
put_page(page);
|
||||
list_add_tail(&page->lru, &source);
|
||||
move_pages--;
|
||||
inc_zone_page_state(page, NR_ISOLATED_ANON +
|
||||
|
@ -725,6 +726,7 @@ do_migrate_range(unsigned long start_pfn, unsigned long end_pfn)
|
|||
pfn);
|
||||
dump_page(page);
|
||||
#endif
|
||||
put_page(page);
|
||||
/* Because we don't have big zone->lock. we should
|
||||
check this again here. */
|
||||
if (page_count(page)) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче