diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-12-15 23:56:43 +0900 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-12-15 23:56:43 +0900 |
commit | 326b06a8a9b09d6d9a276fd550b6b6bb138e9a47 (patch) | |
tree | b9bdcb0bd635b91258cec09c981af2c5dcc0f683 /mm/memory-failure.c | |
parent | 92b2e81d6f95bcee386abac4c4389f5b950f7bb9 (diff) | |
parent | 9bffb1fb7c22c96d51d4ba06e2e023dd568a5872 (diff) |
Merge remote-tracking branch 'asoc/topic/core' into asoc-next
Diffstat (limited to 'mm/memory-failure.c')
-rw-r--r-- | mm/memory-failure.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 6c5899b9034..8b20278be6a 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1476,9 +1476,17 @@ int soft_offline_page(struct page *page, int flags) { int ret; unsigned long pfn = page_to_pfn(page); + struct page *hpage = compound_trans_head(page); if (PageHuge(page)) return soft_offline_huge_page(page, flags); + if (PageTransHuge(hpage)) { + if (PageAnon(hpage) && unlikely(split_huge_page(hpage))) { + pr_info("soft offline: %#lx: failed to split THP\n", + pfn); + return -EBUSY; + } + } ret = get_any_page(page, pfn, flags); if (ret < 0) |