Skip to content
  • Naoya Horiguchi's avatar
    mm: hwpoison: adjust for new thp refcounting · 4e41a30c
    Naoya Horiguchi authored
    
    
    Some mm-related BUG_ON()s could trigger from hwpoison code due to recent
    changes in thp refcounting rule.  This patch fixes them up.
    
    In the new refcounting, we no longer use tail->_mapcount to keep tail's
    refcount, and thereby we can simplify get/put_hwpoison_page().
    
    And another change is that tail's refcount is not transferred to the raw
    page during thp split (more precisely, in new rule we don't take
    refcount on tail page any more.) So when we need thp split, we have to
    transfer the refcount properly to the 4kB soft-offlined page before
    migration.
    
    thp split code goes into core code only when precheck
    (total_mapcount(head) == page_count(head) - 1) passes to avoid useless
    split, where we assume that one refcount is held by the caller of thp
    split and the others are taken via mapping.  To meet this assumption,
    this patch moves thp split part in soft_offline_page() after
    get_any_page().
    
    [akpm@linux-foundation.org: remove unneeded #define, per Kirill]
    Signed-off-by: default avatarNaoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Acked-by: default avatarKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4e41a30c