• Peter Xu's avatar
    mm/hugetlb: prepare hugetlb_follow_page_mask() for FOLL_PIN · 458568c9
    Peter Xu authored
    follow_page() doesn't use FOLL_PIN, meanwhile hugetlb seems to not be the
    target of FOLL_WRITE either.  However add the checks.
    
    Namely, either the need to CoW due to missing write bit, or proper
    unsharing on !AnonExclusive pages over R/O pins to reject the follow page.
    That brings this function closer to follow_hugetlb_page().
    
    So we don't care before, and also for now.  But we'll care if we switch
    over slow-gup to use hugetlb_follow_page_mask().  We'll also care when to
    return -EMLINK properly, as that's the gup internal api to mean "we should
    unshare".  Not really needed for follow page path, though.
    
    When at it, switching the try_grab_page() to use WARN_ON_ONCE(), to be
    clear that it just should never fail.  When error happens, instead of
    setting page==NULL, capture the errno instead.
    
    Link: https://lkml.kernel.org/r/20230628215310.73782-3-peterx@redhat.comSigned-off-by: default avatarPeter Xu <peterx@redhat.com>
    Reviewed-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
    Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: James Houghton <jthoughton@google.com>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Kirill A . Shutemov <kirill@shutemov.name>
    Cc: Lorenzo Stoakes <lstoakes@gmail.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Mike Rapoport (IBM) <rppt@kernel.org>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Yang Shi <shy828301@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    458568c9
hugetlb.c 211 KB