diff options
Diffstat (limited to 'mm/memory-failure.c')
| -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 b7c171602ba1..db08af92c6fc 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -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;  }  | 
