{
        struct page *page;
 
-       VM_BUG_ON(!(vma->vm_flags & VM_WRITE) || pte_write(pte));
+       if (WARN_ON_ONCE(!(vma->vm_flags & VM_WRITE)))
+               return false;
 
+       /* Don't touch entries that are not even readable. */
        if (pte_protnone(pte))
                return false;
 
 
        if (!(vma->vm_flags & VM_SHARED)) {
                /*
-                * We can only special-case on exclusive anonymous pages,
-                * because we know that our write-fault handler similarly would
-                * map them writable without any additional checks while holding
-                * the PT lock.
+                * Writable MAP_PRIVATE mapping: We can only special-case on
+                * exclusive anonymous pages, because we know that our
+                * write-fault handler similarly would map them writable without
+                * any additional checks while holding the PT lock.
                 */
                page = vm_normal_page(vma, addr, pte);
                return page && PageAnon(page) && PageAnonExclusive(page);
        }
 
+       /*
+        * Writable MAP_SHARED mapping: "clean" might indicate that the FS still
+        * needs a real write-fault for writenotify
+        * (see vma_wants_writenotify()). If "dirty", the assumption is that the
+        * FS was already notified and we can simply mark the PTE writable
+        * just like the write-fault handler would do.
+        */
        return pte_dirty(pte);
 }