diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memory-failure.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 6a7f9cab4ddb..7e3601ce51c6 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c | |||
@@ -1499,10 +1499,16 @@ static int soft_offline_huge_page(struct page *page, int flags) | |||
1499 | pr_info("soft offline: %#lx: migration failed %d, type %lx\n", | 1499 | pr_info("soft offline: %#lx: migration failed %d, type %lx\n", |
1500 | pfn, ret, page->flags); | 1500 | pfn, ret, page->flags); |
1501 | } else { | 1501 | } else { |
1502 | set_page_hwpoison_huge_page(hpage); | 1502 | /* overcommit hugetlb page will be freed to buddy */ |
1503 | dequeue_hwpoisoned_huge_page(hpage); | 1503 | if (PageHuge(page)) { |
1504 | atomic_long_add(1 << compound_trans_order(hpage), | 1504 | set_page_hwpoison_huge_page(hpage); |
1505 | &num_poisoned_pages); | 1505 | dequeue_hwpoisoned_huge_page(hpage); |
1506 | atomic_long_add(1 << compound_order(hpage), | ||
1507 | &num_poisoned_pages); | ||
1508 | } else { | ||
1509 | SetPageHWPoison(page); | ||
1510 | atomic_long_inc(&num_poisoned_pages); | ||
1511 | } | ||
1506 | } | 1512 | } |
1507 | /* keep elevated page count for bad page */ | 1513 | /* keep elevated page count for bad page */ |
1508 | return ret; | 1514 | return ret; |