Files
linux/mm
Naoya Horiguchi 415c64c145 mm/memory-failure: split thp earlier in memory error handling
memory_failure() doesn't handle thp itself at this time and need to split
it before doing isolation.  Currently thp is split in the middle of
hwpoison_user_mappings(), but there're corner cases where memory_failure()
wrongly tries to handle thp without splitting.

1) "non anonymous" thp, which is not a normal operating mode of thp,
   but a memory error could hit a thp before anon_vma is initialized.  In
   such case, split_huge_page() fails and me_huge_page() (intended for
   hugetlb) is called for thp, which triggers BUG_ON in page_hstate().

2) !PageLRU case, where hwpoison_user_mappings() returns with
   SWAP_SUCCESS and the result is the same as case 1.

memory_failure() can't avoid splitting, so let's split it more earlier,
which also reduces code which are prepared for both of normal page and
thp.

Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: "Kirill A. Shutemov" <kirill@shutemov.name>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2015-06-24 17:49:42 -07:00
..
2015-04-14 16:49:00 -07:00
2015-02-16 17:56:03 -08:00
2015-04-15 16:35:18 -07:00
2015-04-14 16:49:00 -07:00
2015-05-14 17:55:51 -07:00
2015-04-15 16:35:18 -07:00
2015-02-16 17:56:03 -08:00
2015-04-14 16:49:06 -07:00
2015-04-15 16:35:19 -07:00
2015-02-11 17:06:02 -08:00
2015-06-24 17:49:41 -07:00
2015-04-11 22:27:56 -04:00
2015-04-15 16:35:16 -07:00
2015-03-24 13:41:54 -04:00
2015-04-15 16:35:18 -07:00