James Morse <james.morse@xxxxxxx> writes: > memory_failure() chooses a recovery action function based on the page > flags. For huge pages it uses the tail page flags which don't have > anything interesting set, resulting in: >> Memory failure: 0x9be3b4: Unknown page state >> Memory failure: 0x9be3b4: recovery action for unknown page: Failed > > Instead, save a copy of the head page's flags if this is a huge page, > this means if there are no relevant flags for this tail page, we use > the head pages flags instead. This results in the me_huge_page() > recovery action being called: >> Memory failure: 0x9b7969: recovery action for huge page: Delayed > > For hugepages that have not yet been allocated, this allows the hugepage > to be dequeued. > > CC: Punit Agrawal <punit.agrawal@xxxxxxx> > Signed-off-by: James Morse <james.morse@xxxxxxx> > --- > This is intended as a fix, but I can't find the patch that introduced this > behaviour. (not recent, and there is a lot of history down there!) > > This doesn't apply to stable trees before v3.10... > Cc: stable@xxxxxxxxxxxxxxx # 3.10.105 > > mm/memory-failure.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/mm/memory-failure.c b/mm/memory-failure.c > index 2527dfeddb00..44a6a33af219 100644 > --- a/mm/memory-failure.c > +++ b/mm/memory-failure.c > @@ -1184,7 +1184,10 @@ int memory_failure(unsigned long pfn, int trapno, int flags) > * page_remove_rmap() in try_to_unmap_one(). So to determine page status > * correctly, we save a copy of the page flags at this time. > */ > - page_flags = p->flags; > + if (PageHuge(p)) > + page_flags = hpage->flags; > + else > + page_flags = p->flags; > > /* > * unpoison always clear PG_hwpoison inside page lock I can confirm that this patch reduces the number of failing cases when running hugepage tests from mce-tests suite. FWIW, Acked-by: Punit Agrawal <punit.agrawal@xxxxxxx> Tested-by: Punit Agrawal <punit.agrawal@xxxxxxx> Thanks! -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>