Re: [PATCH 0/2] make VM_SOFTDIRTY a sticky VMA flag
Andrei Vagin <[email protected]> Sun, 16 Nov 2025 16:53:36 -0800
| Newsgroups | dev.linux.lists.criu,org.kernel.vger.linux-kernel,org.kvack.linux-mm |
|---|---|
| Message-ID | <CANaxB-yqsphFXvY0diEaHL+Bg4eJ+z_mqezxen9xVyoyL+4NMw@mail.gmail.com> |
On Fri, Nov 14, 2025 at 9:59 AM Lorenzo Stoakes <[email protected]> wrote: > > Currently we set VM_SOFTDIRTY when a new mapping is set up (whether by > establishing a new VMA, or via merge) as implemented in __mmap_complete() > and do_brk_flags(). > > However, when performing a merge of existing mappings such as when > performing mprotect(), we may lose the VM_SOFTDIRTY flag. Losing VM_SOFTDIRTY is definitely a bug, thank you for fixing it. A separate concern is whether merging two VMAs should be permitted when one has the VM_SOFTDIRTY flag set and another does not. I think the merging operation should be disallowed.The issue is that PAGE_IS_SOFT_DIRTY will be reported for every page in the resulting VMA. Consider a scenario where a large VMA has only a small number of pages marked SOFT_DIRTY. If we merge it with a smaller VMA that does have VM_SOFTDIRTY, all pages in the originally large VMA will subsequently be reported as SOFT_DIRTY. As a result, CRIU will needlessly dump all of these pages again, even though the vast majority of them were unchanged since the prior checkpoint iteration. Thanks, Andrei > > > Lorenzo Stoakes (2): > mm: propagate VM_SOFTDIRTY on merge > testing/selftests/mm: add soft-dirty merge self-test > > include/linux/mm.h | 23 ++++++----- > tools/testing/selftests/mm/soft-dirty.c | 51 ++++++++++++++++++++++++- > tools/testing/vma/vma_internal.h | 23 ++++++----- > 3 files changed, 72 insertions(+), 25 deletions(-) > > -- > 2.51.0 >