|
@@ -1505,10 +1505,16 @@ static int soft_offline_huge_page(struct page *page, int flags)
|
|
|
if (ret > 0)
|
|
|
ret = -EIO;
|
|
|
} else {
|
|
|
- set_page_hwpoison_huge_page(hpage);
|
|
|
- dequeue_hwpoisoned_huge_page(hpage);
|
|
|
- atomic_long_add(1 << compound_order(hpage),
|
|
|
- &num_poisoned_pages);
|
|
|
+ /* overcommit hugetlb page will be freed to buddy */
|
|
|
+ if (PageHuge(page)) {
|
|
|
+ set_page_hwpoison_huge_page(hpage);
|
|
|
+ dequeue_hwpoisoned_huge_page(hpage);
|
|
|
+ atomic_long_add(1 << compound_order(hpage),
|
|
|
+ &num_poisoned_pages);
|
|
|
+ } else {
|
|
|
+ SetPageHWPoison(page);
|
|
|
+ atomic_long_inc(&num_poisoned_pages);
|
|
|
+ }
|
|
|
}
|
|
|
return ret;
|
|
|
}
|