aboutsummaryrefslogtreecommitdiff
path: root/mm/memory-failure.c
diff options
context:
space:
mode:
authorMark Brown <broonie@linaro.org>2014-01-27 14:57:25 +0000
committerMark Brown <broonie@linaro.org>2014-01-27 14:57:25 +0000
commit51ad557e21b8713f3abc286c14bca4ed01b8e56d (patch)
tree357ddab632db8023c5b534309269b20fd50346e3 /mm/memory-failure.c
parent9d069f462c65190c5116e750e7b376793cd32a15 (diff)
parent020abbc91120ddf052e2c303a8c598c3be4dc459 (diff)
Merge tag 'v3.10.28' into linux-linaro-lsklsk-14.01
This is the 3.10.28 stable release
Diffstat (limited to 'mm/memory-failure.c')
-rw-r--r--mm/memory-failure.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 6a7f9cab4dd..7e3601ce51c 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)
pr_info("soft offline: %#lx: migration failed %d, type %lx\n",
pfn, ret, page->flags);
} else {
- set_page_hwpoison_huge_page(hpage);
- dequeue_hwpoisoned_huge_page(hpage);
- atomic_long_add(1 << compound_trans_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);
+ }
}
/* keep elevated page count for bad page */
return ret;