]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
mm: allow fault_dirty_shared_page() to be called under the VMA lock
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Sat, 12 Aug 2023 00:20:33 +0000 (01:20 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 21 Aug 2023 20:38:02 +0000 (13:38 -0700)
By making maybe_unlock_mmap_for_io() handle the VMA lock correctly, we
make fault_dirty_shared_page() safe to be called without the mmap lock
held.

Link: https://lkml.kernel.org/r/20230812002033.1002367-1-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reported-by: David Hildenbrand <david@redhat.com>
Tested-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/internal.h

index a037b1b37f6d782788eb09a5e50b78d8da990466..c6ed10f0a5ad4a7806d8f698f309921808948eb7 100644 (file)
@@ -706,7 +706,7 @@ static inline struct file *maybe_unlock_mmap_for_io(struct vm_fault *vmf,
        if (fault_flag_allow_retry_first(flags) &&
            !(flags & FAULT_FLAG_RETRY_NOWAIT)) {
                fpin = get_file(vmf->vma->vm_file);
-               mmap_read_unlock(vmf->vma->vm_mm);
+               release_fault_lock(vmf);
        }
        return fpin;
 }