On Mon, Jun 30, 2025 at 03:00:02PM +0200, David Hildenbrand wrote: > Let's rename the flag to make it clearer where it applies (not folios > ...). > > While at it, define the flag only with CONFIG_MIGRATION. > > Reviewed-by: Zi Yan <z...@nvidia.com> > Signed-off-by: David Hildenbrand <da...@redhat.com>
LGTM, so: Reviewed-by: Lorenzo Stoakes <lorenzo.stoa...@oracle.com> > --- > include/linux/page-flags.h | 16 +++++++++++----- > mm/compaction.c | 2 +- > mm/migrate.c | 14 +++++++------- > 3 files changed, 19 insertions(+), 13 deletions(-) > > diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h > index 016a6e6fa428a..aa48b05536bca 100644 > --- a/include/linux/page-flags.h > +++ b/include/linux/page-flags.h > @@ -167,10 +167,9 @@ enum pageflags { > /* Remapped by swiotlb-xen. */ > PG_xen_remapped = PG_owner_priv_1, > > - /* non-lru isolated movable page */ Ah nice to drop another confusing reference to LRU when really meaning 'non-could-be-lru-possibly' :P > - PG_isolated = PG_reclaim, > - > #ifdef CONFIG_MIGRATION > + /* movable_ops page that is isolated for migration */ > + PG_movable_ops_isolated = PG_reclaim, > /* this is a movable_ops page (for selected typed pages only) */ > PG_movable_ops = PG_uptodate, > #endif > @@ -1126,8 +1125,6 @@ static inline bool folio_contain_hwpoisoned_page(struct > folio *folio) > > bool is_free_buddy_page(const struct page *page); > > -PAGEFLAG(Isolated, isolated, PF_ANY); > - > #ifdef CONFIG_MIGRATION > /* > * This page is migratable through movable_ops (for selected typed pages > @@ -1146,8 +1143,17 @@ PAGEFLAG(Isolated, isolated, PF_ANY); > * page_has_movable_ops() instead. > */ > PAGEFLAG(MovableOps, movable_ops, PF_NO_TAIL); > +/* > + * A movable_ops page has this flag set while it is isolated for migration. > + * This flag primarily protects against concurrent migration attempts. > + * > + * Once migration ended (success or failure), the flag is cleared. The > + * flag is managed by the migration core. > + */ > +PAGEFLAG(MovableOpsIsolated, movable_ops_isolated, PF_NO_TAIL); > #else > PAGEFLAG_FALSE(MovableOps, movable_ops); > +PAGEFLAG_FALSE(MovableOpsIsolated, movable_ops_isolated); > #endif Nit, but maybe worth sticking /* CONFIG_MIGRATION */ on else and endif? Not a huge block so maybe not massively important but just a thought! > > /** > diff --git a/mm/compaction.c b/mm/compaction.c > index 349f4ea0ec3e5..bf021b31c7ece 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -1051,7 +1051,7 @@ isolate_migratepages_block(struct compact_control *cc, > unsigned long low_pfn, > if (!PageLRU(page)) { > /* Isolation code will deal with any races. */ > if (unlikely(page_has_movable_ops(page)) && > - !PageIsolated(page)) { > + !PageMovableOpsIsolated(page)) { > if (locked) { > unlock_page_lruvec_irqrestore(locked, > flags); > locked = NULL; > diff --git a/mm/migrate.c b/mm/migrate.c > index c6c9998014ec8..62a3ee590b245 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -135,7 +135,7 @@ bool isolate_movable_ops_page(struct page *page, > isolate_mode_t mode) > goto out_putfolio; > > VM_WARN_ON_ONCE_PAGE(!page_has_movable_ops(page), page); > - if (PageIsolated(page)) > + if (PageMovableOpsIsolated(page)) > goto out_no_isolated; > > mops = page_movable_ops(page); > @@ -146,8 +146,8 @@ bool isolate_movable_ops_page(struct page *page, > isolate_mode_t mode) > goto out_no_isolated; > > /* Driver shouldn't use the isolated flag */ > - VM_WARN_ON_ONCE_PAGE(PageIsolated(page), page); > - SetPageIsolated(page); > + VM_WARN_ON_ONCE_PAGE(PageMovableOpsIsolated(page), page); > + SetPageMovableOpsIsolated(page); > folio_unlock(folio); > > return true; > @@ -177,10 +177,10 @@ static void putback_movable_ops_page(struct page *page) > struct folio *folio = page_folio(page); > > VM_WARN_ON_ONCE_PAGE(!page_has_movable_ops(page), page); > - VM_WARN_ON_ONCE_PAGE(!PageIsolated(page), page); > + VM_WARN_ON_ONCE_PAGE(!PageMovableOpsIsolated(page), page); > folio_lock(folio); > page_movable_ops(page)->putback_page(page); > - ClearPageIsolated(page); > + ClearPageMovableOpsIsolated(page); > folio_unlock(folio); > folio_put(folio); > } > @@ -216,10 +216,10 @@ static int migrate_movable_ops_page(struct page *dst, > struct page *src, > int rc = MIGRATEPAGE_SUCCESS; > > VM_WARN_ON_ONCE_PAGE(!page_has_movable_ops(src), src); > - VM_WARN_ON_ONCE_PAGE(!PageIsolated(src), src); > + VM_WARN_ON_ONCE_PAGE(!PageMovableOpsIsolated(src), src); > rc = page_movable_ops(src)->migrate_page(dst, src, mode); > if (rc == MIGRATEPAGE_SUCCESS) > - ClearPageIsolated(src); > + ClearPageMovableOpsIsolated(src); > return rc; > } > > -- > 2.49.0 >