• Jin Dongming's avatar
    thp: fix splitting of hwpoisoned hugepages · efeda7a4
    Jin Dongming authored
    The poisoned THP is now split with split_huge_page() in
    collect_procs_anon().  If kmalloc() is failed in collect_procs(),
    split_huge_page() could not be called.  And the work after
    split_huge_page() for collecting the processes using poisoned page will
    not be done, too.  So the processes using the poisoned page could not be
    killed.
    
    The condition becomes worse when CONFIG_DEBUG_VM == "Y".  Because the
    poisoned THP could not be split, system panic will be caused by
    VM_BUG_ON(PageTransHuge(page)) in try_to_unmap().
    
    This patch does:
      1. move split_huge_page() to the place before collect_procs().
         This can be sure the failure of splitting THP is caused by itself.
      2. when splitting THP is failed, stop the operations after it.
         This can avoid unexpected system panic or non sense works.
    
    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: default avatarJin Dongming <jin.dongming@np.css.fujitsu.com>
    Reviewed-by: default avatarHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Andi Kleen <andi@firstfloor.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    efeda7a4
memory-failure.c 39.6 KB