if (should_zap_cows(details))
                return true;
 
-       /* E.g. the caller passes NULL for the case of a zero folio */
-       if (!folio)
-               return true;
-
        /* Otherwise we should only zap non-anon folios */
        return !folio_test_anon(folio);
 }
                int *rss, bool *force_flush, bool *force_break)
 {
        struct mm_struct *mm = tlb->mm;
-       struct folio *folio = NULL;
        bool delay_rmap = false;
+       struct folio *folio;
        struct page *page;
 
        page = vm_normal_page(vma, addr, ptent);
-       if (page)
-               folio = page_folio(page);
+       if (!page) {
+               /* We don't need up-to-date accessed/dirty bits. */
+               ptep_get_and_clear_full(mm, addr, pte, tlb->fullmm);
+               arch_check_zapped_pte(vma, ptent);
+               tlb_remove_tlb_entry(tlb, pte, addr);
+               VM_WARN_ON_ONCE(userfaultfd_wp(vma));
+               ksm_might_unmap_zero_page(mm, ptent);
+               return;
+       }
 
+       folio = page_folio(page);
        if (unlikely(!should_zap_folio(details, folio)))
                return;
        ptent = ptep_get_and_clear_full(mm, addr, pte, tlb->fullmm);
        arch_check_zapped_pte(vma, ptent);
        tlb_remove_tlb_entry(tlb, pte, addr);
        zap_install_uffd_wp_if_needed(vma, addr, pte, details, ptent);
-       if (unlikely(!page)) {
-               ksm_might_unmap_zero_page(mm, ptent);
-               return;
-       }
 
        if (!folio_test_anon(folio)) {
                if (pte_dirty(ptent)) {