[PATCH] mm: anon is already wrprotected
do_anonymous_page's pte_wrprotect causes some confusion: in such a case, vm_page_prot must already be forcing COW, so must omit write permission, and so the pte_wrprotect is redundant. Replace it by a comment to that effect, and reword the comment on unuse_pte which also caused confusion. Signed-off-by: Hugh Dickins <hugh@veritas.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Родитель
6237bcd948
Коммит
72866f6f27
|
@ -1768,13 +1768,14 @@ do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
|
|||
unsigned long addr)
|
||||
{
|
||||
pte_t entry;
|
||||
struct page * page = ZERO_PAGE(addr);
|
||||
|
||||
/* Read-only mapping of ZERO_PAGE. */
|
||||
entry = pte_wrprotect(mk_pte(ZERO_PAGE(addr), vma->vm_page_prot));
|
||||
/* Mapping of ZERO_PAGE - vm_page_prot is readonly */
|
||||
entry = mk_pte(ZERO_PAGE(addr), vma->vm_page_prot);
|
||||
|
||||
/* ..except if it's a write access */
|
||||
if (write_access) {
|
||||
struct page *page;
|
||||
|
||||
/* Allocate our own private page. */
|
||||
pte_unmap(page_table);
|
||||
spin_unlock(&mm->page_table_lock);
|
||||
|
|
|
@ -398,10 +398,9 @@ void free_swap_and_cache(swp_entry_t entry)
|
|||
}
|
||||
|
||||
/*
|
||||
* Always set the resulting pte to be nowrite (the same as COW pages
|
||||
* after one process has exited). We don't know just how many PTEs will
|
||||
* share this swap entry, so be cautious and let do_wp_page work out
|
||||
* what to do if a write is requested later.
|
||||
* No need to decide whether this PTE shares the swap entry with others,
|
||||
* just let do_wp_page work it out if a write is requested later - to
|
||||
* force COW, vm_page_prot omits write permission from any private vma.
|
||||
*
|
||||
* vma->vm_mm->page_table_lock is held.
|
||||
*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче