|
@@ -1697,20 +1697,7 @@ static int __soft_offline_page(struct page *page, int flags)
|
|
|
if (ret > 0)
|
|
|
ret = -EIO;
|
|
|
} else {
|
|
|
- /*
|
|
|
- * After page migration succeeds, the source page can
|
|
|
- * be trapped in pagevec and actual freeing is delayed.
|
|
|
- * Freeing code works differently based on PG_hwpoison,
|
|
|
- * so there's a race. We need to make sure that the
|
|
|
- * source page should be freed back to buddy before
|
|
|
- * setting PG_hwpoison.
|
|
|
- */
|
|
|
- if (!is_free_buddy_page(page))
|
|
|
- drain_all_pages(page_zone(page));
|
|
|
SetPageHWPoison(page);
|
|
|
- if (!is_free_buddy_page(page))
|
|
|
- pr_info("soft offline: %#lx: page leaked\n",
|
|
|
- pfn);
|
|
|
atomic_long_inc(&num_poisoned_pages);
|
|
|
}
|
|
|
} else {
|
|
@@ -1762,14 +1749,6 @@ int soft_offline_page(struct page *page, int flags)
|
|
|
|
|
|
get_online_mems();
|
|
|
|
|
|
- /*
|
|
|
- * Isolate the page, so that it doesn't get reallocated if it
|
|
|
- * was free. This flag should be kept set until the source page
|
|
|
- * is freed and PG_hwpoison on it is set.
|
|
|
- */
|
|
|
- if (get_pageblock_migratetype(page) != MIGRATE_ISOLATE)
|
|
|
- set_migratetype_isolate(page, true);
|
|
|
-
|
|
|
ret = get_any_page(page, pfn, flags);
|
|
|
put_online_mems();
|
|
|
if (ret > 0) { /* for in-use pages */
|
|
@@ -1788,6 +1767,5 @@ int soft_offline_page(struct page *page, int flags)
|
|
|
atomic_long_inc(&num_poisoned_pages);
|
|
|
}
|
|
|
}
|
|
|
- unset_migratetype_isolate(page, MIGRATE_MOVABLE);
|
|
|
return ret;
|
|
|
}
|