Subject: mm: avoid dirtying shared mappings on mlock Suleiman noticed that shared mappings get dirtied when mlocked. Avoid this by teaching make_pages_present about this case. Signed-off-by: Peter Zijlstra <[email protected]> Acked-by: Suleiman Souhlal <[email protected]> --- mm/memory.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) Index: linux-2.6/mm/memory.c =================================================================== --- linux-2.6.orig/mm/memory.c +++ linux-2.6/mm/memory.c @@ -2719,7 +2719,12 @@ int make_pages_present(unsigned long add vma = find_vma(current->mm, addr); if (!vma) return -1; - write = (vma->vm_flags & VM_WRITE) != 0; + /* + * We want to touch writable mappings with a write fault in order + * to break COW, except for shared mappings because these don't COW + * and we would not want to dirty them for nothing. + */ + write = (vma->vm_flags & (VM_WRITE|VM_SHARED)) == VM_WRITE; BUG_ON(addr >= end); BUG_ON(end > vma->vm_end); len = DIV_ROUND_UP(end, PAGE_SIZE) - addr/PAGE_SIZE;
Attachment:
signature.asc
Description: This is a digitally signed message part
- Follow-Ups:
- Re: [PATCH] mm: avoid dirtying shared mappings on mlock
- From: Nick Piggin <[email protected]>
- Re: [PATCH] mm: avoid dirtying shared mappings on mlock
- References:
- Re: [PATCH] Don't needlessly dirty mlocked pages when initially faulting them in.
- From: Suleiman Souhlal <[email protected]>
- Re: [PATCH] Don't needlessly dirty mlocked pages when initially faulting them in.
- Prev by Date: Re: [rfc][patch 3/3] x86: optimise barriers
- Next by Date: [PATCH 00/31] Remove iget() and read_inode() [try #4]
- Previous by thread: Re: [PATCH] Don't needlessly dirty mlocked pages when initially faulting them in.
- Next by thread: Re: [PATCH] mm: avoid dirtying shared mappings on mlock
- Index(es):