Commit 668e0d8f authored by Hugh Dickins's avatar Hugh Dickins Committed by Linus Torvalds

[PATCH] fix update_mmu_cache in fremap.c

There are two calls to update_mmu_cache in fremap.c, both defective.
The one in install_page needs to be accompanied by lazy_mmu_prot_update
(some other cleanup time, move that into ia64 update_mmu_cache itself); and
the one in install_file_pte should be removed since the pte is not present.
Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 185606fc
...@@ -83,6 +83,7 @@ int install_page(struct mm_struct *mm, struct vm_area_struct *vma, ...@@ -83,6 +83,7 @@ int install_page(struct mm_struct *mm, struct vm_area_struct *vma,
page_add_file_rmap(page); page_add_file_rmap(page);
pte_val = *pte; pte_val = *pte;
update_mmu_cache(vma, addr, pte_val); update_mmu_cache(vma, addr, pte_val);
lazy_mmu_prot_update(pte_val);
err = 0; err = 0;
unlock: unlock:
pte_unmap_unlock(pte, ptl); pte_unmap_unlock(pte, ptl);
...@@ -114,7 +115,13 @@ int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, ...@@ -114,7 +115,13 @@ int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma,
set_pte_at(mm, addr, pte, pgoff_to_pte(pgoff)); set_pte_at(mm, addr, pte, pgoff_to_pte(pgoff));
pte_val = *pte; pte_val = *pte;
update_mmu_cache(vma, addr, pte_val); /*
* We don't need to run update_mmu_cache() here because the "file pte"
* being installed by install_file_pte() is not a real pte - it's a
* non-present entry (like a swap entry), noting what file offset should
* be mapped there when there's a fault (in a non-linear vma where
* that's not obvious).
*/
pte_unmap_unlock(pte, ptl); pte_unmap_unlock(pte, ptl);
err = 0; err = 0;
out: out:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment