mm,hwpoison: introduce MF_MSG_UNSPLIT_THP
memory_failure() is supposed to call action_result() when it handles a memory error event, but there's one missing case. So let's add it. I find that include/ras/ras_event.h has some other MF_MSG_* undefined, so this patch also adds them. Signed-off-by: Naoya Horiguchi <naoya.horiguchi@nec.com> Signed-off-by: Oscar Salvador <osalvador@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: Aristeu Rozanski <aris@ruivo.org> Cc: Dave Hansen <dave.hansen@intel.com> Cc: David Hildenbrand <david@redhat.com> Cc: Dmitry Yakunin <zeil@yandex-team.ru> Cc: Michal Hocko <mhocko@kernel.org> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Oscar Salvador <osalvador@suse.com> Cc: Qian Cai <cai@lca.pw> Cc: Tony Luck <tony.luck@intel.com> Link: https://lkml.kernel.org/r/20200922135650.1634-13-osalvador@suse.de Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
5a2ffca3c2
Коммит
5d1fd5dc87
|
@ -3064,6 +3064,7 @@ enum mf_action_page_type {
|
|||
MF_MSG_BUDDY,
|
||||
MF_MSG_BUDDY_2ND,
|
||||
MF_MSG_DAX,
|
||||
MF_MSG_UNSPLIT_THP,
|
||||
MF_MSG_UNKNOWN,
|
||||
};
|
||||
|
||||
|
|
|
@ -361,6 +361,7 @@ TRACE_EVENT(aer_event,
|
|||
EM ( MF_MSG_POISONED_HUGE, "huge page already hardware poisoned" ) \
|
||||
EM ( MF_MSG_HUGE, "huge page" ) \
|
||||
EM ( MF_MSG_FREE_HUGE, "free huge page" ) \
|
||||
EM ( MF_MSG_NON_PMD_HUGE, "non-pmd-sized huge page" ) \
|
||||
EM ( MF_MSG_UNMAP_FAILED, "unmapping failed page" ) \
|
||||
EM ( MF_MSG_DIRTY_SWAPCACHE, "dirty swapcache page" ) \
|
||||
EM ( MF_MSG_CLEAN_SWAPCACHE, "clean swapcache page" ) \
|
||||
|
@ -373,6 +374,8 @@ TRACE_EVENT(aer_event,
|
|||
EM ( MF_MSG_TRUNCATED_LRU, "already truncated LRU page" ) \
|
||||
EM ( MF_MSG_BUDDY, "free buddy page" ) \
|
||||
EM ( MF_MSG_BUDDY_2ND, "free buddy page (2nd try)" ) \
|
||||
EM ( MF_MSG_DAX, "dax page" ) \
|
||||
EM ( MF_MSG_UNSPLIT_THP, "unsplit thp" ) \
|
||||
EMe ( MF_MSG_UNKNOWN, "unknown page" )
|
||||
|
||||
/*
|
||||
|
|
|
@ -582,6 +582,7 @@ static const char * const action_page_types[] = {
|
|||
[MF_MSG_BUDDY] = "free buddy page",
|
||||
[MF_MSG_BUDDY_2ND] = "free buddy page (2nd try)",
|
||||
[MF_MSG_DAX] = "dax page",
|
||||
[MF_MSG_UNSPLIT_THP] = "unsplit thp",
|
||||
[MF_MSG_UNKNOWN] = "unknown page",
|
||||
};
|
||||
|
||||
|
@ -1370,8 +1371,10 @@ int memory_failure(unsigned long pfn, int flags)
|
|||
}
|
||||
|
||||
if (PageTransHuge(hpage)) {
|
||||
if (try_to_split_thp_page(p, "Memory Failure") < 0)
|
||||
if (try_to_split_thp_page(p, "Memory Failure") < 0) {
|
||||
action_result(pfn, MF_MSG_UNSPLIT_THP, MF_IGNORED);
|
||||
return -EBUSY;
|
||||
}
|
||||
VM_BUG_ON_PAGE(!page_count(p), p);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче