• Peter Xu's avatar
    hugetlb: dedup the code to add a new file_region · 2103cf9c
    Peter Xu authored
    Patch series "mm/hugetlb: Early cow on fork, and a few cleanups", v5.
    
    As reported by Gal [1], we still miss the code clip to handle early cow
    for hugetlb case, which is true.  Again, it still feels odd to fork()
    after using a few huge pages, especially if they're privately mapped to
    me..  However I do agree with Gal and Jason in that we should still have
    that since that'll complete the early cow on fork effort at least, and
    it'll still fix issues where buffers are not well under control and not
    easy to apply MADV_DONTFORK.
    
    The first two patches (1-2) are some cleanups I noticed when reading into
    the hugetlb reserve map code.  I think it's good to have but they're not
    necessary for fixing the fork issue.
    
    The last two patches (3-4) are the real fix.
    
    I tested this with a fork() after some vfio-pci assignment, so I'm pretty
    sure the page copy path could trigger well (page will be accounted right
    after the fork()), but I didn't do data check since the card I assigned is
    some random nic.
    
      https://github.com/xzpeter/linux/tree/fork-cow-pin-huge
    
    [1] https://lore.kernel.org/lkml/27564187-4a08-f187-5a84-3df50009f6ca@amazon.com/
    
    Introduce hugetlb_resv_map_add() helper to add a new file_region rather
    than duplication the similar code twice in add_reservation_in_range().
    
    Link: https://lkml.kernel.org/r/20210217233547.93892-1-peterx@redhat.com
    Link: https://lkml.kernel.org/r/20210217233547.93892-2-peterx@redhat.comSigned-off-by: default avatarPeter Xu <peterx@redhat.com>
    Reviewed-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: default avatarMiaohe Lin <linmiaohe@huawei.com>
    Cc: Gal Pressman <galpress@amazon.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Wei Zhang <wzam@amazon.com>
    Cc: Mike Rapoport <rppt@linux.vnet.ibm.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: David Gibson <david@gibson.dropbear.id.au>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Jann Horn <jannh@google.com>
    Cc: Kirill Tkhai <ktkhai@virtuozzo.com>
    Cc: Kirill Shutemov <kirill@shutemov.name>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: David Airlie <airlied@linux.ie>
    Cc: Roland Scheidegger <sroland@vmware.com>
    Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2103cf9c
hugetlb.c 155 KB