In most of cases, GUP will not modify the page table,
excluding follow_pfn_pte(). To deal with COW PTE, break
COW PTE in follow_pfn_pte().
Signed-off-by: Chih-En Lin <[email protected]>
---
mm/gup.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/mm/gup.c b/mm/gup.c
index fe195d47de74a..cd72010ba0e6d 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -476,6 +476,8 @@ static int follow_pfn_pte(struct vm_area_struct *vma, unsigned long address,
entry = pte_mkyoung(entry);
if (!pte_same(*pte, entry)) {
+ if (break_cow_pte(vma, NULL, address) < 0)
+ return -ENOMEM;
set_pte_at(vma->vm_mm, address, pte, entry);
update_mmu_cache(vma, address, pte);
}
--
2.37.3