From 9fbf9c4f9153028dcef8dc029d40d8e7d9f88d92 Mon Sep 17 00:00:00 2001 From: Wu Fengguang Date: Wed, 16 Dec 2009 12:19:58 +0100 Subject: [PATCH] --- yaml --- r: 177624 b: refs/heads/master c: d95ea51e3a7e9ee051d19f1dd283ca61d1aa5ec6 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/memory-failure.c | 22 +++++++--------------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/[refs] b/[refs] index 960866c5f178..da292ffdad56 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 847ce401df392b0704369fd3f75df614ac1414b4 +refs/heads/master: d95ea51e3a7e9ee051d19f1dd283ca61d1aa5ec6 diff --git a/trunk/mm/memory-failure.c b/trunk/mm/memory-failure.c index ed6e91c87a54..fd1ac1537f06 100644 --- a/trunk/mm/memory-failure.c +++ b/trunk/mm/memory-failure.c @@ -336,16 +336,16 @@ static void collect_procs(struct page *page, struct list_head *tokill) */ enum outcome { - FAILED, /* Error handling failed */ + IGNORED, /* Error: cannot be handled */ + FAILED, /* Error: handling failed */ DELAYED, /* Will be handled later */ - IGNORED, /* Error safely ignored */ RECOVERED, /* Successfully recovered */ }; static const char *action_name[] = { + [IGNORED] = "Ignored", [FAILED] = "Failed", [DELAYED] = "Delayed", - [IGNORED] = "Ignored", [RECOVERED] = "Recovered", }; @@ -379,14 +379,6 @@ static int delete_from_lru_cache(struct page *p) * could be more sophisticated. */ static int me_kernel(struct page *p, unsigned long pfn) -{ - return DELAYED; -} - -/* - * Already poisoned page. - */ -static int me_ignore(struct page *p, unsigned long pfn) { return IGNORED; } @@ -604,7 +596,7 @@ static struct page_state { char *msg; int (*action)(struct page *p, unsigned long pfn); } error_states[] = { - { reserved, reserved, "reserved kernel", me_ignore }, + { reserved, reserved, "reserved kernel", me_kernel }, /* * free pages are specially detected outside this table: * PG_buddy pages only make a small fraction of all free pages. @@ -788,7 +780,7 @@ int __memory_failure(unsigned long pfn, int trapno, int flags) p = pfn_to_page(pfn); if (TestSetPageHWPoison(p)) { - action_result(pfn, "already hardware poisoned", IGNORED); + printk(KERN_ERR "MCE %#lx: already hardware poisoned\n", pfn); return 0; } @@ -843,7 +835,7 @@ int __memory_failure(unsigned long pfn, int trapno, int flags) * unpoison always clear PG_hwpoison inside page lock */ if (!PageHWPoison(p)) { - action_result(pfn, "unpoisoned", IGNORED); + printk(KERN_ERR "MCE %#lx: just unpoisoned\n", pfn); res = 0; goto out; } @@ -865,7 +857,7 @@ int __memory_failure(unsigned long pfn, int trapno, int flags) */ if (PageLRU(p) && !PageSwapCache(p) && p->mapping == NULL) { action_result(pfn, "already truncated LRU", IGNORED); - res = 0; + res = -EBUSY; goto out; }