diff options
Diffstat (limited to 'mm/mremap.c')
-rw-r--r-- | mm/mremap.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/mm/mremap.c b/mm/mremap.c index fc45dc9a617b..a32fed454bd7 100644 --- a/mm/mremap.c +++ b/mm/mremap.c | |||
@@ -141,6 +141,10 @@ move_one_page(struct vm_area_struct *vma, unsigned long old_addr, | |||
141 | if (dst) { | 141 | if (dst) { |
142 | pte_t pte; | 142 | pte_t pte; |
143 | pte = ptep_clear_flush(vma, old_addr, src); | 143 | pte = ptep_clear_flush(vma, old_addr, src); |
144 | /* ZERO_PAGE can be dependant on virtual addr */ | ||
145 | if (pfn_valid(pte_pfn(pte)) && | ||
146 | pte_page(pte) == ZERO_PAGE(old_addr)) | ||
147 | pte = pte_wrprotect(mk_pte(ZERO_PAGE(new_addr), new_vma->vm_page_prot)); | ||
144 | set_pte_at(mm, new_addr, dst, pte); | 148 | set_pte_at(mm, new_addr, dst, pte); |
145 | } else | 149 | } else |
146 | error = -ENOMEM; | 150 | error = -ENOMEM; |