• Zi Yan's avatar
    mm/migrate: correct nr_failed in migrate_pages_sync() · a259945e
    Zi Yan authored
    nr_failed was missing the large folio splits from migrate_pages_batch()
    and can cause a mismatch between migrate_pages() return value and the
    number of not migrated pages, i.e., when the return value of
    migrate_pages() is 0, there are still pages left in the from page list. 
    It will happen when a non-PMD THP large folio fails to migrate due to
    -ENOMEM and is split successfully but not all the split pages are not
    migrated, migrate_pages_batch() would return non-zero, but
    astats.nr_thp_split = 0.  nr_failed would be 0 and returned to the caller
    of migrate_pages(), but the not migrated pages are left in the from page
    list without being added back to LRU lists.
    
    Fix it by adding a new nr_split counter for large folio splits and adding
    it to nr_failed in migrate_page_sync() after migrate_pages_batch() is
    done.
    
    Link: https://lkml.kernel.org/r/20231017163129.2025214-1-zi.yan@sent.com
    Fixes: 2ef7dbb2 ("migrate_pages: try migrate in batch asynchronously firstly")
    Signed-off-by: default avatarZi Yan <ziy@nvidia.com>
    Acked-by: default avatarHuang Ying <ying.huang@intel.com>
    Reviewed-by: default avatarBaolin Wang <baolin.wang@linux.alibaba.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    a259945e
migrate.c 69 KB