X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=mm%2Fmremap.c;h=a32fed454bd7c60e15da0c720b1631b55a3f8835;hb=b2d550736f8b2186b8ef7e206d0bfbfec2238ae8;hp=fc45dc9a617b013f4db5aea5fe7898bf6cd677b6;hpb=3cb904caa97f5c193df21b8cdf780a826564baff;p=linux-2.6 diff --git a/mm/mremap.c b/mm/mremap.c index fc45dc9a61..a32fed454b 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, if (dst) { pte_t pte; pte = ptep_clear_flush(vma, old_addr, src); + /* ZERO_PAGE can be dependant on virtual addr */ + if (pfn_valid(pte_pfn(pte)) && + pte_page(pte) == ZERO_PAGE(old_addr)) + pte = pte_wrprotect(mk_pte(ZERO_PAGE(new_addr), new_vma->vm_page_prot)); set_pte_at(mm, new_addr, dst, pte); } else error = -ENOMEM;