]> rtime.felk.cvut.cz Git - can-eth-gw-linux.git/blobdiff - mm/memory.c
mlock: avoid dirtying pages and triggering writeback
[can-eth-gw-linux.git] / mm / memory.c
index 9144fae9a68bcb46eb1f4a500a3d8b605d9e03bd..b8f97b8575b7fa5b765ac2fa044b24538feb1844 100644 (file)
@@ -3299,7 +3299,12 @@ int make_pages_present(unsigned long addr, unsigned long end)
        vma = find_vma(current->mm, addr);
        if (!vma)
                return -ENOMEM;
-       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;