|
@@ -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)) {
|