• A
    mm/migrate.c: rework migration_entry_wait() to not take a pageref · ffa65753
    Alistair Popple 提交于
    This fixes the FIXME in migrate_vma_check_page().
    
    Before migrating a page migration code will take a reference and check
    there are no unexpected page references, failing the migration if there
    are.  When a thread faults on a migration entry it will take a temporary
    reference to the page to wait for the page to become unlocked signifying
    the migration entry has been removed.
    
    This reference is dropped just prior to waiting on the page lock,
    however the extra reference can cause migration failures so it is
    desirable to avoid taking it.
    
    As migration code already has a reference to the migrating page an extra
    reference to wait on PG_locked is unnecessary so long as the reference
    can't be dropped whilst setting up the wait.
    
    When faulting on a migration entry the ptl is taken to check the
    migration entry.  Removing a migration entry also requires the ptl, and
    migration code won't drop its page reference until after the migration
    entry has been removed.  Therefore retaining the ptl of a migration
    entry is sufficient to ensure the page has a reference.  Reworking
    migration_entry_wait() to hold the ptl until the wait setup is complete
    means the extra page reference is no longer needed.
    
    [apopple@nvidia.com: v5]
      Link: https://lkml.kernel.org/r/20211213033848.1973946-1-apopple@nvidia.com
    
    Link: https://lkml.kernel.org/r/20211118020754.954425-1-apopple@nvidia.comSigned-off-by: NAlistair Popple <apopple@nvidia.com>
    Acked-by: NDavid Hildenbrand <david@redhat.com>
    Cc: David Howells <dhowells@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Jason Gunthorpe <jgg@nvidia.com>
    Cc: Jerome Glisse <jglisse@redhat.com>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Ralph Campbell <rcampbell@nvidia.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    ffa65753
filemap.c 111.4 KB