Re: [PATCH 1/2] mm/migrate_device.c: Copy pte dirty bit to page

From: Alistair Popple
Date: Tue Aug 16 2022 - 02:33:35 EST



Peter Xu <peterx@xxxxxxxxxx> writes:

> Hi, Alistair,
>
> On Fri, Aug 12, 2022 at 03:22:30PM +1000, Alistair Popple wrote:
>> migrate_vma_setup() has a fast path in migrate_vma_collect_pmd() that
>> installs migration entries directly if it can lock the migrating page.
>> When removing a dirty pte the dirty bit is supposed to be carried over
>> to the underlying page to prevent it being lost.
>>
>> Currently migrate_vma_*() can only be used for private anonymous
>> mappings. That means loss of the dirty bit usually doesn't result in
>> data loss because these pages are typically not file-backed. However
>> pages may be backed by swap storage which can result in data loss if an
>> attempt is made to migrate a dirty page that doesn't yet have the
>> PageDirty flag set.
>>
>> In this case migration will fail due to unexpected references but the
>> dirty pte bit will be lost. If the page is subsequently reclaimed data
>> won't be written back to swap storage as it is considered uptodate,
>> resulting in data loss if the page is subsequently accessed.
>>
>> Prevent this by copying the dirty bit to the page when removing the pte
>> to match what try_to_migrate_one() does.
>>
>> Signed-off-by: Alistair Popple <apopple@xxxxxxxxxx>
>> Reported-by: Peter Xu <peterx@xxxxxxxxxx>
>
> This line should be:
>
> Reported-by: Huang Ying <ying.huang@xxxxxxxxx>
>
> Please also feel free to add:
>
> Acked-by: Peter Xu <peterx@xxxxxxxxxx>

Thanks Peter, my bad. I assume Andrew can fix up the tags if I don't
need to re-spin this series.

> Thanks,