Re: [RFC PATCH v4 2/6] mm/migrate: skip data copy for already-copied folios
From: David Hildenbrand (Arm)
Date: Mon Mar 23 2026 - 08:28:00 EST
On 3/15/26 19:25, Garg, Shivank wrote:
>
>
> On 3/12/2026 3:14 PM, David Hildenbrand (Arm) wrote:
>> On 3/9/26 13:07, Shivank Garg wrote:
>>> Add a PAGE_ALREADY_COPIED flag to the dst->private migration state.
>>> When set, __migrate_folio() skips folio_mc_copy() and performs
>>> metadata-only migration. All callers currently pass
>>> already_copied=false. The batch-copy path enables it in a later patch.
>>>
>>> Move the dst->private state enum earlier in the file so
>>> __migrate_folio() and move_to_new_folio() can see PAGE_ALREADY_COPIED.
>>>
>>> Signed-off-by: Shivank Garg <shivankg@xxxxxxx>
>>> ---
>>> mm/migrate.c | 52 +++++++++++++++++++++++++++++++---------------------
>>> 1 file changed, 31 insertions(+), 21 deletions(-)
>>>
>>> diff --git a/mm/migrate.c b/mm/migrate.c
>>> index 1bf2cf8c44dd..1d8c1fb627c9 100644
>>> --- a/mm/migrate.c
>>> +++ b/mm/migrate.c
>>> @@ -848,6 +848,18 @@ void folio_migrate_flags(struct folio *newfolio, struct folio *folio)
>>> }
>>> EXPORT_SYMBOL(folio_migrate_flags);
>>>
>>> +/*
>>> + * To record some information during migration, we use unused private
>>> + * field of struct folio of the newly allocated destination folio.
>>> + * This is safe because nobody is using it except us.
>>> + */
>>> +enum {
>>> + PAGE_WAS_MAPPED = BIT(0),
>>> + PAGE_WAS_MLOCKED = BIT(1),
>>> + PAGE_ALREADY_COPIED = BIT(2),
>>> + PAGE_OLD_STATES = PAGE_WAS_MAPPED | PAGE_WAS_MLOCKED | PAGE_ALREADY_COPIED,
>>
>> All these states really only apply to proper folios (not movable_ops).
>> So once we complete decoupling movable_ops migration from folio
>> migration, these flags would only appear in the folio migration part.
>>
>> Can we convert them first to state it clearly already that these are
>> folio migration flags?
>>
>> FOLIO_MF_WAS_MAPPED
>>
>> ...
>>
> Sure, done.
>
> Should I fold it into the series? Or send it as independent patch as this series would
> likely take few more rounds of reviews and discussion.
Best to send it out as a standalone cleanup :)
--
Cheers,
David