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 | |
| 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>
| -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 |
