From: Miaohe Lin Subject: mm/madvise: free hwpoison and swapin error entry in madvise_free_pte_range Once the MADV_FREE operation has succeeded, callers can expect they might get zero-fill pages if accessing the memory again. Therefore it should be safe to delete the hwpoison entry and swapin error entry. There is no reason to kill the process if it has called MADV_FREE on the range. Link: https://lkml.kernel.org/r/20220424091105.48374-4-linmiaohe@huawei.com Signed-off-by: Miaohe Lin Suggested-by: Alistair Popple Acked-by: David Hildenbrand Reviewed-by: Naoya Horiguchi Cc: Matthew Wilcox Cc: Vlastimil Babka Cc: David Howells Cc: NeilBrown Cc: Suren Baghdasaryan Cc: Minchan Kim Cc: Peter Xu Cc: Stephen Rothwell Signed-off-by: Andrew Morton --- mm/madvise.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) --- a/mm/madvise.c~mm-madvise-free-hwpoison-and-swapin-error-entry-in-madvise_free_pte_range +++ a/mm/madvise.c @@ -624,11 +624,14 @@ static int madvise_free_pte_range(pmd_t swp_entry_t entry; entry = pte_to_swp_entry(ptent); - if (non_swap_entry(entry)) - continue; - nr_swap--; - free_swap_and_cache(entry); - pte_clear_not_present_full(mm, addr, pte, tlb->fullmm); + if (!non_swap_entry(entry)) { + nr_swap--; + free_swap_and_cache(entry); + pte_clear_not_present_full(mm, addr, pte, tlb->fullmm); + } else if (is_hwpoison_entry(entry) || + is_swapin_error_entry(entry)) { + pte_clear_not_present_full(mm, addr, pte, tlb->fullmm); + } continue; } _