lkml.org 
[lkml]   [2023]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v3 26/35] mm: fall back to mmap_lock if vma->anon_vma is not yet set
    From
    When vma->anon_vma is not set, page fault handler will set it by either
    reusing anon_vma of an adjacent VMA if VMAs are compatible or by
    allocating a new one. find_mergeable_anon_vma() walks VMA tree to find
    a compatible adjacent VMA and that requires not only the faulting VMA
    to be stable but also the tree structure and other VMAs inside that tree.
    Therefore locking just the faulting VMA is not enough for this search.
    Fall back to taking mmap_lock when vma->anon_vma is not set. This
    situation happens only on the first page fault and should not affect
    overall performance.

    Signed-off-by: Suren Baghdasaryan <surenb@google.com>
    ---
    mm/memory.c | 4 ++++
    1 file changed, 4 insertions(+)

    diff --git a/mm/memory.c b/mm/memory.c
    index 5e1c124552a1..13369ff15ec1 100644
    --- a/mm/memory.c
    +++ b/mm/memory.c
    @@ -5242,6 +5242,10 @@ struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm,
    if (!vma_is_anonymous(vma))
    goto inval;

    + /* find_mergeable_anon_vma uses adjacent vmas which are not locked */
    + if (!vma->anon_vma)
    + goto inval;
    +
    if (!vma_start_read(vma))
    goto inval;

    --
    2.39.1
    \
     
     \ /
      Last update: 2023-03-27 00:25    [W:3.021 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site