Subject: Re: [PATCH v1 19/29] mm: stop storing migration_ops in page->mapping

From: Harry Yoo <[email-masked]>
Date: Wed, 2 Jul 2025 19:34:04 +0900

On Mon, Jun 30, 2025 at 03:00:00PM +0200, David Hildenbrand wrote:
> ... instead, look them up statically based on the page type. Maybe in the
> future we want a registration interface? At least for now, it can be
> easily handled using the two page types that actually support page
> migration.
> 
> The remaining usage of page->mapping is to flag such pages as actually
> being movable (having movable_ops), which we will change next.
> 
> Reviewed-by: Zi Yan <[email-masked]>
> Signed-off-by: David Hildenbrand <[email-masked]>
> ---

> +static const struct movable_operations *page_movable_ops(struct page *page)
> +{
> +	VM_WARN_ON_ONCE_PAGE(!page_has_movable_ops(page), page);
> +
> +	/*
> +	 * If we enable page migration for a page of a certain type by marking
> +	 * it as movable, the page type must be sticky until the page gets freed
> +	 * back to the buddy.
> +	 */
> +#ifdef CONFIG_BALLOON_COMPACTION
> +	if (PageOffline(page))
> +		/* Only balloon compaction sets PageOffline pages movable. */
> +		return &balloon_mops;
> +#endif /* CONFIG_BALLOON_COMPACTION */
> +#if defined(CONFIG_ZSMALLOC) && defined(CONFIG_COMPACTION)
> +	if (PageZsmalloc(page))
> +		return &zsmalloc_mops;
> +#endif /* defined(CONFIG_ZSMALLOC) && defined(CONFIG_COMPACTION) */

What happens if:
  CONFIG_ZSMALLOC=y
  CONFIG_TRANSPARENT_HUGEPAGE=n
  CONFIG_COMPACTION=n
  CONFIG_MIGRATION=y

?

> +	return NULL;
> +}
> +
>  /**
>   * isolate_movable_ops_page - isolate a movable_ops page for migration
>   * @page: The page.

Otherwise LGTM.

-- 
Cheers,
Harry / Hyeonggon