• Liam R. Howlett's avatar
    mm/mmap: change do_brk_flags() to expand existing VMA and add do_brk_munmap() · 2e7ce7d3
    Liam R. Howlett authored
    Avoid allocating a new VMA when it a vma modification can occur.  When a
    brk() can expand or contract a VMA, then the single store operation will
    only modify one index of the maple tree instead of causing a node to split
    or coalesce.  This avoids unnecessary allocations/frees of maple tree
    nodes and VMAs.
    
    Move some limit & flag verifications out of the do_brk_flags() function to
    use only relevant checks in the code path of bkr() and vm_brk_flags().
    
    Set the vma to check if it can expand in vm_brk_flags() if extra criteria
    are met.
    
    Drop userfaultfd from do_brk_flags() path and only use it in
    vm_brk_flags() path since that is the only place a munmap will happen.
    
    Add a wraper for munmap for the brk case called do_brk_munmap().
    
    Link: https://lkml.kernel.org/r/20220906194824.2110408-23-Liam.Howlett@oracle.comSigned-off-by: default avatarLiam R. Howlett <Liam.Howlett@Oracle.com>
    Tested-by: default avatarYu Zhao <yuzhao@google.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
    Cc: SeongJae Park <sj@kernel.org>
    Cc: Sven Schnelle <svens@linux.ibm.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    2e7ce7d3
mmap.c 98.7 KB