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