• Liam R. Howlett's avatar
    mm/mmap: reorganize munmap to use maple states · 11f9a21a
    Liam R. Howlett authored
    Remove __do_munmap() in favour of do_munmap(), do_mas_munmap(), and
    do_mas_align_munmap().
    
    do_munmap() is a wrapper to create a maple state for any callers that have
    not been converted to the maple tree.
    
    do_mas_munmap() takes a maple state to mumap a range.  This is just a
    small function which checks for error conditions and aligns the end of the
    range.
    
    do_mas_align_munmap() uses the aligned range to mumap a range.
    do_mas_align_munmap() starts with the first VMA in the range, then finds
    the last VMA in the range.  Both start and end are split if necessary.
    Then the VMAs are removed from the linked list and the mm mlock count is
    updated at the same time.  Followed by a single tree operation of
    overwriting the area in with a NULL.  Finally, the detached list is
    unmapped and freed.
    
    By reorganizing the munmap calls as outlined, it is now possible to avoid
    extra work of aligning pre-aligned callers which are known to be safe,
    avoid extra VMA lookups or tree walks for modifications.
    
    detach_vmas_to_be_unmapped() is no longer used, so drop this code.
    
    vm_brk_flags() can just call the do_mas_munmap() as it checks for
    intersecting VMAs directly.
    
    Link: https://lkml.kernel.org/r/20220906194824.2110408-29-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>
    11f9a21a
mremap.c 28.2 KB