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

Lorenzo Stoakes
2025-07-01T13:22:04Z

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@redhat.com>

LGTM, so:

Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@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
>