[PATCH v1 28/29] mm/balloon_compaction: "movable_ops" doc updates

Lorenzo Stoakes lorenzo.stoakes at oracle.com
Tue Jul 1 23:20:11 AEST 2025


On Mon, Jun 30, 2025 at 03:00:09PM +0200, David Hildenbrand wrote:
> Let's bring the docs up-to-date. Setting PG_movable_ops + page->private
> very likely still requires to be performed under documented locks:
> it's complicated.
>
> We will rework this in the future, as we will try avoiding using the
> page lock.
>
> Signed-off-by: David Hildenbrand <david at redhat.com>

LGTM, so:

Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes at oracle.com>

> ---
>  include/linux/balloon_compaction.h | 13 ++++++-------
>  1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/include/linux/balloon_compaction.h b/include/linux/balloon_compaction.h
> index b222b0737c466..2fecfead91d26 100644
> --- a/include/linux/balloon_compaction.h
> +++ b/include/linux/balloon_compaction.h
> @@ -4,12 +4,13 @@
>   *
>   * Common interface definitions for making balloon pages movable by compaction.
>   *
> - * Balloon page migration makes use of the general non-lru movable page
> + * Balloon page migration makes use of the general "movable_ops page migration"
>   * feature.
>   *
>   * page->private is used to reference the responsible balloon device.
> - * page->mapping is used in context of non-lru page migration to reference
> - * the address space operations for page isolation/migration/compaction.
> + * That these pages have movable_ops, and which movable_ops apply,
> + * is derived from the page type (PageOffline()) combined with the
> + * PG_movable_ops flag (PageMovableOps()).
>   *
>   * As the page isolation scanning step a compaction thread does is a lockless
>   * procedure (from a page standpoint), it might bring some racy situations while
> @@ -17,12 +18,10 @@
>   * and safely perform balloon's page compaction and migration we must, always,
>   * ensure following these simple rules:
>   *
> - *   i. when updating a balloon's page ->mapping element, strictly do it under
> - *      the following lock order, independently of the far superior
> - *      locking scheme (lru_lock, balloon_lock):
> + *   i. Setting the PG_movable_ops flag and page->private with the following
> + *	lock order
>   *	    +-page_lock(page);
>   *	      +--spin_lock_irq(&b_dev_info->pages_lock);
> - *	            ... page->mapping updates here ...
>   *
>   *  ii. isolation or dequeueing procedure must remove the page from balloon
>   *      device page list under b_dev_info->pages_lock.
> --
> 2.49.0
>


More information about the Linuxppc-dev mailing list