Loading mm/migrate.c +12 −7 Original line number Diff line number Diff line Loading @@ -336,13 +336,18 @@ void pmd_migration_entry_wait(struct mm_struct *mm, pmd_t *pmd) } #endif static int expected_page_refs(struct address_space *mapping, struct page *page) static int folio_expected_refs(struct address_space *mapping, struct folio *folio) { int expected_count = 1; int refs = 1; if (!mapping) return refs; refs += folio_nr_pages(folio); if (folio_test_private(folio)) refs++; if (mapping) expected_count += compound_nr(page) + page_has_private(page); return expected_count; return refs; } /* Loading @@ -359,7 +364,7 @@ int folio_migrate_mapping(struct address_space *mapping, XA_STATE(xas, &mapping->i_pages, folio_index(folio)); struct zone *oldzone, *newzone; int dirty; int expected_count = expected_page_refs(mapping, &folio->page) + extra_count; int expected_count = folio_expected_refs(mapping, folio) + extra_count; long nr = folio_nr_pages(folio); if (!mapping) { Loading Loading @@ -669,7 +674,7 @@ static int __buffer_migrate_folio(struct address_space *mapping, return migrate_page(mapping, &dst->page, &src->page, mode); /* Check whether page does not have extra refs before we do more work */ expected_count = expected_page_refs(mapping, &src->page); expected_count = folio_expected_refs(mapping, src); if (folio_ref_count(src) != expected_count) return -EAGAIN; Loading Loading
mm/migrate.c +12 −7 Original line number Diff line number Diff line Loading @@ -336,13 +336,18 @@ void pmd_migration_entry_wait(struct mm_struct *mm, pmd_t *pmd) } #endif static int expected_page_refs(struct address_space *mapping, struct page *page) static int folio_expected_refs(struct address_space *mapping, struct folio *folio) { int expected_count = 1; int refs = 1; if (!mapping) return refs; refs += folio_nr_pages(folio); if (folio_test_private(folio)) refs++; if (mapping) expected_count += compound_nr(page) + page_has_private(page); return expected_count; return refs; } /* Loading @@ -359,7 +364,7 @@ int folio_migrate_mapping(struct address_space *mapping, XA_STATE(xas, &mapping->i_pages, folio_index(folio)); struct zone *oldzone, *newzone; int dirty; int expected_count = expected_page_refs(mapping, &folio->page) + extra_count; int expected_count = folio_expected_refs(mapping, folio) + extra_count; long nr = folio_nr_pages(folio); if (!mapping) { Loading Loading @@ -669,7 +674,7 @@ static int __buffer_migrate_folio(struct address_space *mapping, return migrate_page(mapping, &dst->page, &src->page, mode); /* Check whether page does not have extra refs before we do more work */ expected_count = expected_page_refs(mapping, &src->page); expected_count = folio_expected_refs(mapping, src); if (folio_ref_count(src) != expected_count) return -EAGAIN; Loading