diff --git a/mm/vmscan.c b/mm/vmscan.c index 08213f1c18ee7a0d67eaccc4d7ad6553aa929815..e82d7995b548de64b58c6d53ec154fcb1ac39d02 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1327,6 +1327,16 @@ static unsigned int shrink_page_list(struct list_head *page_list, if (!trylock_page(page)) goto keep; + if (PageHWPoison(page)) { + if (PageTransHuge(page)) + goto keep_locked; + + try_to_unmap(page, TTU_IGNORE_MLOCK); + unlock_page(page); + put_page(page); + continue; + } + VM_BUG_ON_PAGE(PageActive(page), page); nr_pages = compound_nr(page);