• John Hubbard's avatar
    mm: fix get_user_pages_remote()'s handling of FOLL_LONGTERM · c4237f8b
    John Hubbard authored
    As it says in the updated comment in gup.c: current FOLL_LONGTERM
    behavior is incompatible with FAULT_FLAG_ALLOW_RETRY because of the FS
    DAX check requirement on vmas.
    
    However, the corresponding restriction in get_user_pages_remote() was
    slightly stricter than is actually required: it forbade all
    FOLL_LONGTERM callers, but we can actually allow FOLL_LONGTERM callers
    that do not set the "locked" arg.
    
    Update the code and comments to loosen the restriction, allowing
    FOLL_LONGTERM in some cases.
    
    Also, copy the DAX check ("if a VMA is DAX, don't allow long term
    pinning") from the VFIO call site, all the way into the internals of
    get_user_pages_remote() and __gup_longterm_locked().  That is:
    get_user_pages_remote() calls __gup_longterm_locked(), which in turn
    calls check_dax_vmas().  This check will then be removed from the VFIO
    call site in a subsequent patch.
    
    Thanks to Jason Gunthorpe for pointing out a clean way to fix this, and
    to Dan Williams for helping clarify the DAX refactoring.
    
    Link: http://lkml.kernel.org/r/20200107224558.2362728-7-jhubbard@nvidia.com
    
    Signed-off-by: default avatarJohn Hubbard <jhubbard@nvidia.com>
    Tested-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    Acked-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    Reviewed-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    Reviewed-by: default avatarIra Weiny <ira.weiny@intel.com>
    Suggested-by: default avatarJason Gunthorpe <jgg@ziepe.ca>
    Cc: Kirill A. Shutemov <kirill@shutemov.name>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Jerome Glisse <jglisse@redhat.com>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Björn Töpel <bjorn.topel@intel.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Leon Romanovsky <leonro@mellanox.com>
    Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
    Cc: Mike Rapoport <rppt@linux.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c4237f8b
gup.c 66.6 KB