* case, all we need to do here is to mark the page as writable and update
  * any related book-keeping.
  */
-static inline void wp_page_reuse(struct vm_fault *vmf)
+static inline void wp_page_reuse(struct vm_fault *vmf, struct folio *folio)
        __releases(vmf->ptl)
 {
        struct vm_area_struct *vma = vmf->vma;
        pte_t entry;
 
        VM_BUG_ON(!(vmf->flags & FAULT_FLAG_WRITE));
-       VM_BUG_ON(page && PageAnon(page) && !PageAnonExclusive(page));
+       VM_BUG_ON(folio && folio_test_anon(folio) && !PageAnonExclusive(page));
 
        /*
         * Clear the pages cpupid information as the existing
  *                       writeable once the page is prepared
  *
  * @vmf: structure describing the fault
+ * @folio: the folio of vmf->page
  *
  * This function handles all that is needed to finish a write page fault in a
  * shared mapping due to PTE being read-only once the mapped page is prepared.
  * Return: %0 on success, %VM_FAULT_NOPAGE when PTE got changed before
  * we acquired PTE lock.
  */
-static vm_fault_t finish_mkwrite_fault(struct vm_fault *vmf)
+static vm_fault_t finish_mkwrite_fault(struct vm_fault *vmf, struct folio *folio)
 {
        WARN_ON_ONCE(!(vmf->vma->vm_flags & VM_SHARED));
        vmf->pte = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd, vmf->address,
                pte_unmap_unlock(vmf->pte, vmf->ptl);
                return VM_FAULT_NOPAGE;
        }
-       wp_page_reuse(vmf);
+       wp_page_reuse(vmf, folio);
        return 0;
 }
 
                ret = vma->vm_ops->pfn_mkwrite(vmf);
                if (ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE))
                        return ret;
-               return finish_mkwrite_fault(vmf);
+               return finish_mkwrite_fault(vmf, NULL);
        }
-       wp_page_reuse(vmf);
+       wp_page_reuse(vmf, NULL);
        return 0;
 }
 
                        folio_put(folio);
                        return tmp;
                }
-               tmp = finish_mkwrite_fault(vmf);
+               tmp = finish_mkwrite_fault(vmf, folio);
                if (unlikely(tmp & (VM_FAULT_ERROR | VM_FAULT_NOPAGE))) {
                        folio_unlock(folio);
                        folio_put(folio);
                        return tmp;
                }
        } else {
-               wp_page_reuse(vmf);
+               wp_page_reuse(vmf, folio);
                folio_lock(folio);
        }
        ret |= fault_dirty_shared_page(vmf);
                        pte_unmap_unlock(vmf->pte, vmf->ptl);
                        return 0;
                }
-               wp_page_reuse(vmf);
+               wp_page_reuse(vmf, folio);
                return 0;
        }
        /*