• Vishal Moola (Oracle)'s avatar
    mm/memory: change vmf_anon_prepare() to be non-static · 997f0ecb
    Vishal Moola (Oracle) authored
    Patch series "Handle hugetlb faults under the VMA lock", v2.
    
    It is generally safe to handle hugetlb faults under the VMA lock.  The
    only time this is unsafe is when no anon_vma has been allocated to this
    vma yet, so we can use vmf_anon_prepare() instead of anon_vma_prepare() to
    bailout if necessary.  This should only happen for the first hugetlb page
    in the vma.
    
    Additionally, this patchset begins to use struct vm_fault within
    hugetlb_fault().  This works towards cleaning up hugetlb code, and should
    significantly reduce the number of arguments passed to functions.
    
    The last patch in this series may cause ltp hugemmap10 to "fail".  This is
    because vmf_anon_prepare() may bailout with no anon_vma under the VMA lock
    after allocating a folio for the hugepage.  In free_huge_folio(), this
    folio is completely freed on bailout iff there is a surplus of hugetlb
    pages.  This will remove a folio off the freelist and decrement the number
    of hugepages while ltp expects these counters to remain unchanged on
    failure.  The rest of the ltp testcases pass.
    
    
    This patch (of 2):
    
    In order to handle hugetlb faults under the VMA lock, hugetlb can use
    vmf_anon_prepare() to ensure we can safely prepare an anon_vma.  Change it
    to be a non-static function so it can be used within hugetlb as well.
    
    Link: https://lkml.kernel.org/r/20240221234732.187629-6-vishal.moola@gmail.com
    Link: https://lkml.kernel.org/r/20240221234732.187629-2-vishal.moola@gmail.comSigned-off-by: default avatarVishal Moola (Oracle) <vishal.moola@gmail.com>
    Reviewed-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    997f0ecb
internal.h 39 KB