Re: [PATCH 00/10] cleanup vma_merge() and improve mergeability tests

From: Liam R. Howlett
Date: Mon Mar 20 2023 - 10:17:01 EST



Sorry for the late review, I've been away.

For the whole series,
Reviewed-by: Liam R. Howlett <Liam.Howlett@xxxxxxxxxx>

* Vlastimil Babka <vbabka@xxxxxxx> [230309 06:18]:
> Also available in git:
> https://git.kernel.org/vbabka/h/vma_merge_cleanup-v1r2
>
> Changes since RFC:
> - rebased to 6.3-rc1, dropped first patch (urgent fix) that was merged there
> - reindent parameters of mergeability checks (suggested by willy on IRC)
>
> My initial goal here was to try making the check for vm_ops->close in
> is_mergeable_vma() only be applied for vma's that would be truly removed
> as part of the merge (see Patch 9). This would then allow reverting the
> quick fix d014cd7c1c35 ("mm, mremap: fix mremap() expanding for vma's
> with vm_ops->close()"). This was successful enough to allow the revert
> (Patch 10). Checks using can_vma_merge_before() are still pessimistic
> about possible vma removal, and making them precise would probably
> complicate the vma_merge() code too much.
>
> Liam's 6.3-rc1 simplification of vma_merge() and removal of
> __vma_adjust() was very much helpful in understanding the vma_merge()
> implementation and especially when vma removals can happen, which is now
> very obvious. While studing the code, I've found ways to make it
> hopefully even more easy to follow, so that's the patches 1-8. That made
> me also notice a bug that's now already fixed in 6.3-rc1.
>
> Vlastimil Babka (10):
> mm/mmap/vma_merge: use only primary pointers for preparing merge
> mm/mmap/vma_merge: use the proper vma pointer in case 3
> mm/mmap/vma_merge: use the proper vma pointers in cases 1 and 6
> mm/mmap/vma_merge: use the proper vma pointer in case 4
> mm/mmap/vma_merge: initialize mid and next in natural order
> mm/mmap/vma_merge: set mid to NULL if not applicable
> mm/mmap/vma_merge: rename adj_next to adj_start
> mm/mmap/vma_merge: convert mergeability checks to return bool
> mm/mmap: start distinguishing if vma can be removed in mergeability
> test
> mm/mremap: simplify vma expansion again
>
> mm/mmap.c | 142 ++++++++++++++++++++++++++++------------------------
> mm/mremap.c | 20 ++------
> 2 files changed, 80 insertions(+), 82 deletions(-)
>
> --
> 2.39.2
>