• Suren Baghdasaryan's avatar
    mm: handle swap page faults under per-VMA lock · 1235ccd0
    Suren Baghdasaryan authored
    When page fault is handled under per-VMA lock protection, all swap page
    faults are retried with mmap_lock because folio_lock_or_retry has to drop
    and reacquire mmap_lock if folio could not be immediately locked.  Follow
    the same pattern as mmap_lock to drop per-VMA lock when waiting for folio
    and retrying once folio is available.
    
    With this obstacle removed, enable do_swap_page to operate under per-VMA
    lock protection.  Drivers implementing ops->migrate_to_ram might still
    rely on mmap_lock, therefore we have to fall back to mmap_lock in that
    particular case.
    
    Note that the only time do_swap_page calls synchronous swap_readpage is
    when SWP_SYNCHRONOUS_IO is set, which is only set for
    QUEUE_FLAG_SYNCHRONOUS devices: brd, zram and nvdimms (both btt and pmem).
    Therefore we don't sleep in this path, and there's no need to drop the
    mmap or per-VMA lock.
    
    Link: https://lkml.kernel.org/r/20230630211957.1341547-6-surenb@google.comSigned-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
    Tested-by: default avatarAlistair Popple <apopple@nvidia.com>
    Reviewed-by: default avatarAlistair Popple <apopple@nvidia.com>
    Acked-by: default avatarPeter Xu <peterx@redhat.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Hillf Danton <hdanton@sina.com>
    Cc: "Huang, Ying" <ying.huang@intel.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Josef Bacik <josef@toxicpanda.com>
    Cc: Laurent Dufour <ldufour@linux.ibm.com>
    Cc: Liam R. Howlett <Liam.Howlett@oracle.com>
    Cc: Lorenzo Stoakes <lstoakes@gmail.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Michel Lespinasse <michel@lespinasse.org>
    Cc: Minchan Kim <minchan@google.com>
    Cc: Pavel Tatashin <pasha.tatashin@soleen.com>
    Cc: Punit Agrawal <punit.agrawal@bytedance.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Yu Zhao <yuzhao@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    1235ccd0
mm.h 120 KB