|
@@ -1691,16 +1691,16 @@ static int soft_offline_in_use_page(struct page *page, int flags)
|
|
|
|
|
|
if (!PageHuge(page) && PageTransHuge(hpage)) {
|
|
|
lock_page(hpage);
|
|
|
- ret = split_huge_page(hpage);
|
|
|
- unlock_page(hpage);
|
|
|
- if (unlikely(ret || PageTransCompound(page) ||
|
|
|
- !PageAnon(page))) {
|
|
|
- pr_info("soft offline: %#lx: failed to split THP\n",
|
|
|
- page_to_pfn(page));
|
|
|
- if (flags & MF_COUNT_INCREASED)
|
|
|
- put_hwpoison_page(hpage);
|
|
|
+ if (!PageAnon(hpage) || unlikely(split_huge_page(hpage))) {
|
|
|
+ unlock_page(hpage);
|
|
|
+ if (!PageAnon(hpage))
|
|
|
+ pr_info("soft offline: %#lx: non anonymous thp\n", page_to_pfn(page));
|
|
|
+ else
|
|
|
+ pr_info("soft offline: %#lx: thp split failed\n", page_to_pfn(page));
|
|
|
+ put_hwpoison_page(hpage);
|
|
|
return -EBUSY;
|
|
|
}
|
|
|
+ unlock_page(hpage);
|
|
|
get_hwpoison_page(page);
|
|
|
put_hwpoison_page(hpage);
|
|
|
}
|