diff options
author | Wu Fengguang <fengguang.wu@intel.com> | 2009-12-16 06:19:58 -0500 |
---|---|---|
committer | Andi Kleen <ak@linux.intel.com> | 2009-12-16 06:19:58 -0500 |
commit | 138ce286eb6ee6d39ca4fb50516e93adaf6b605f (patch) | |
tree | a3dc707a8daa6d28e1b1b0d8315dcc5c5339ed59 /mm/memory-failure.c | |
parent | d95ea51e3a7e9ee051d19f1dd283ca61d1aa5ec6 (diff) |
HWPOISON: return 0 to indicate success reliably
Return 0 to indicate success, when
- action result is RECOVERED or DELAYED
- no extra page reference
Note that dirty swapcache pages are kept in swapcache, so can have one
more reference count.
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
Diffstat (limited to 'mm/memory-failure.c')
-rw-r--r-- | mm/memory-failure.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index fd1ac1537f06..edeaf2319e74 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c | |||
@@ -654,17 +654,21 @@ static int page_action(struct page_state *ps, struct page *p, | |||
654 | action_result(pfn, ps->msg, result); | 654 | action_result(pfn, ps->msg, result); |
655 | 655 | ||
656 | count = page_count(p) - 1; | 656 | count = page_count(p) - 1; |
657 | if (count != 0) | 657 | if (ps->action == me_swapcache_dirty && result == DELAYED) |
658 | count--; | ||
659 | if (count != 0) { | ||
658 | printk(KERN_ERR | 660 | printk(KERN_ERR |
659 | "MCE %#lx: %s page still referenced by %d users\n", | 661 | "MCE %#lx: %s page still referenced by %d users\n", |
660 | pfn, ps->msg, count); | 662 | pfn, ps->msg, count); |
663 | result = FAILED; | ||
664 | } | ||
661 | 665 | ||
662 | /* Could do more checks here if page looks ok */ | 666 | /* Could do more checks here if page looks ok */ |
663 | /* | 667 | /* |
664 | * Could adjust zone counters here to correct for the missing page. | 668 | * Could adjust zone counters here to correct for the missing page. |
665 | */ | 669 | */ |
666 | 670 | ||
667 | return result == RECOVERED ? 0 : -EBUSY; | 671 | return (result == RECOVERED || result == DELAYED) ? 0 : -EBUSY; |
668 | } | 672 | } |
669 | 673 | ||
670 | #define N_UNMAP_TRIES 5 | 674 | #define N_UNMAP_TRIES 5 |