• Vlastimil Babka's avatar
    mm/mmap: start distinguishing if vma can be removed in mergeability test · 714965ca
    Vlastimil Babka authored
    Since pre-git times, is_mergeable_vma() returns false for a vma with
    vm_ops->close, so that no owner assumptions are violated in case the vma
    is removed as part of the merge.
    
    This check is currently very conservative and can prevent merging even
    situations where vma can't be removed, such as simple expansion of
    previous vma, as evidenced by commit d014cd7c ("mm, mremap: fix
    mremap() expanding for vma's with vm_ops->close()")
    
    In order to allow more merging when appropriate and simplify the code that
    was made more complex by commit d014cd7c, start distinguishing cases
    where the vma can be really removed, and allow merging with vm_ops->close
    otherwise.
    
    As a first step, add a may_remove_vma parameter to is_mergeable_vma(). 
    can_vma_merge_before() sets it to true, because when called from
    vma_merge(), a removal of the vma is possible.
    
    In can_vma_merge_after(), pass the parameter as false, because no
    removal can occur in each of its callers:
    - vma_merge() calls it on the 'prev' vma, which is never removed
    - mmap_region() and do_brk_flags() call it to determine if it can expand
      a vma, which is not removed
    
    As a result, vma's with vm_ops->close may now merge with compatible ranges
    in more situations than previously.  We can also revert commit
    d014cd7c as the next step to simplify mremap code again.
    
    [vbabka@suse.cz: adjust comment as suggested by Lorenzo]
      Link: https://lkml.kernel.org/r/74f2ea6c-f1a9-6dd7-260c-25e660f42379@suse.cz
    Link: https://lkml.kernel.org/r/20230309111258.24079-10-vbabka@suse.czSigned-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Reviewed-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
    Cc: Lorenzo Stoakes <lstoakes@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    714965ca
mmap.c 99.1 KB