diff options
author | Wanpeng Li <liwanp@linux.vnet.ibm.com> | 2013-09-30 16:45:23 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-09-30 17:31:02 -0400 |
commit | 2d421acd1568cf2d83739a1afec8e18edb9e3d16 (patch) | |
tree | 4c96dfcd9036bac702647259b804e752e29696d7 /mm | |
parent | e76d30e20be5fca46c185a1470b045b89f95edcb (diff) |
mm/hwpoison: fix false report on 2nd attempt at page recovery
If the page is poisoned by software injection w/ MF_COUNT_INCREASED
flag, there is a false report during the 2nd attempt at page recovery
which is not truthful.
This patch fixes it by reporting the first attempt to try free buddy
page recovery if MF_COUNT_INCREASED is set.
Before patch:
[ 346.332041] Injecting memory failure at pfn 200010
[ 346.332189] MCE 0x200010: free buddy, 2nd try page recovery: Delayed
After patch:
[ 297.742600] Injecting memory failure at pfn 200010
[ 297.742941] MCE 0x200010: free buddy page recovery: Delayed
Reviewed-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Acked-by: Andi Kleen <ak@linux.intel.com>
Signed-off-by: Wanpeng Li <liwanp@linux.vnet.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memory-failure.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 3faba33c67cc..bf3351b5115e 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c | |||
@@ -1114,8 +1114,10 @@ int memory_failure(unsigned long pfn, int trapno, int flags) | |||
1114 | * shake_page could have turned it free. | 1114 | * shake_page could have turned it free. |
1115 | */ | 1115 | */ |
1116 | if (is_free_buddy_page(p)) { | 1116 | if (is_free_buddy_page(p)) { |
1117 | action_result(pfn, "free buddy, 2nd try", | 1117 | if (flags & MF_COUNT_INCREASED) |
1118 | DELAYED); | 1118 | action_result(pfn, "free buddy", DELAYED); |
1119 | else | ||
1120 | action_result(pfn, "free buddy, 2nd try", DELAYED); | ||
1119 | return 0; | 1121 | return 0; |
1120 | } | 1122 | } |
1121 | action_result(pfn, "non LRU", IGNORED); | 1123 | action_result(pfn, "non LRU", IGNORED); |