diff options
author | Hugh Dickins <hugh.dickins@tiscali.co.uk> | 2009-10-13 10:02:11 -0400 |
---|---|---|
committer | Andi Kleen <ak@linux.intel.com> | 2009-10-19 01:29:20 -0400 |
commit | 01e00f880ca700376e1845cf7a2524ebe68e47d6 (patch) | |
tree | 6e15c363298dd01dd44d5c96afd9ef36078a1247 | |
parent | 4779cb31c0ee3b355116745edca3f3e5fe865553 (diff) |
HWPOISON: fix oops on ksm pages
Memory failure on a KSM page currently oopses on its NULL anon_vma in
page_lock_anon_vma(): that may not be much worse than the consequence
of ignoring it, but it is better to be consistent with how ZERO_PAGE
and hugetlb pages and other awkward cases are treated. Just skip it.
Signed-off-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Signed-off-by: Andi Kleen <ak@linux.intel.com>
-rw-r--r-- | mm/memory-failure.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/mm/memory-failure.c b/mm/memory-failure.c index e17ec3f1c637..e354b9f2f389 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/mm.h> | 35 | #include <linux/mm.h> |
36 | #include <linux/page-flags.h> | 36 | #include <linux/page-flags.h> |
37 | #include <linux/sched.h> | 37 | #include <linux/sched.h> |
38 | #include <linux/ksm.h> | ||
38 | #include <linux/rmap.h> | 39 | #include <linux/rmap.h> |
39 | #include <linux/pagemap.h> | 40 | #include <linux/pagemap.h> |
40 | #include <linux/swap.h> | 41 | #include <linux/swap.h> |
@@ -644,7 +645,7 @@ static void hwpoison_user_mappings(struct page *p, unsigned long pfn, | |||
644 | int i; | 645 | int i; |
645 | int kill = 1; | 646 | int kill = 1; |
646 | 647 | ||
647 | if (PageReserved(p) || PageCompound(p) || PageSlab(p)) | 648 | if (PageReserved(p) || PageCompound(p) || PageSlab(p) || PageKsm(p)) |
648 | return; | 649 | return; |
649 | 650 | ||
650 | /* | 651 | /* |