On Tue, Jun 04, 2024 at 11:58:24AM +0100, Usama Arif wrote: > +++ b/mm/rmap.c > @@ -1819,96 +1819,101 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma, > */ > dec_mm_counter(mm, mm_counter(folio)); > } else if (folio_test_anon(folio)) { > - swp_entry_t entry = page_swap_entry(subpage); > - pte_t swp_pte; > - /* > - * Store the swap location in the pte. > - * See handle_pte_fault() ... > - */ > - if (unlikely(folio_test_swapbacked(folio) != > - folio_test_swapcache(folio))) { > + if (flags & TTU_ZERO_FOLIO) { > + pte_clear(mm, address, pvmw.pte); > + dec_mm_counter(mm, MM_ANONPAGES); > + } else { This is very hard to review. Is what you've done the same as: if (flags & TTU_ZERO_FOLIO) { pte_clear(mm, address, pvmw.pte); dec_mm_counter(mm, MM_ANONPAGES); goto discard; } ? I genuinely can't tell.