RAS, HWPOISON: Fix wrong error recovery status
authorChen, Gong <gong.chen@linux.intel.com>
Mon, 28 Jul 2014 06:51:00 +0000 (02:51 -0400)
committerBorislav Petkov <bp@suse.de>
Tue, 21 Oct 2014 20:06:50 +0000 (22:06 +0200)
When Uncorrected error happens, if the poisoned page is referenced
by more than one user after error recovery, the recovery is not
successful. But currently the display result is wrong.
Before this patch:

MCE 0x44e336: dirty mlocked LRU page recovery: Recovered
MCE 0x44e336: dirty mlocked LRU page still referenced by 1 users
mce: Memory error not recovered

After this patch:

MCE 0x44e336: dirty mlocked LRU page recovery: Failed
MCE 0x44e336: dirty mlocked LRU page still referenced by 1 users
mce: Memory error not recovered

Signed-off-by: Chen, Gong <gong.chen@linux.intel.com>
Link: http://lkml.kernel.org/r/1406530260-26078-3-git-send-email-gong.chen@linux.intel.com
Acked-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Acked-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
mm/memory-failure.c

index 8639f6b28746b313bcd12bca3693a11079e18143..b852b10ec76d8b9acc7fbc231f099d9a03155eda 100644 (file)
@@ -860,7 +860,6 @@ static int page_action(struct page_state *ps, struct page *p,
        int count;
 
        result = ps->action(p, pfn);
-       action_result(pfn, ps->msg, result);
 
        count = page_count(p) - 1;
        if (ps->action == me_swapcache_dirty && result == DELAYED)
@@ -871,6 +870,7 @@ static int page_action(struct page_state *ps, struct page *p,
                       pfn, ps->msg, count);
                result = FAILED;
        }
+       action_result(pfn, ps->msg, result);
 
        /* Could do more checks here if page looks ok */
        /*