@@ -1732,16 +1732,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);
}