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

Message ID 20230309111258.24079-1-vbabka@suse.cz
Headers
Series cleanup vma_merge() and improve mergeability tests |

Message

Vlastimil Babka March 9, 2023, 11:12 a.m. UTC
  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(-)
  

Comments

Liam R. Howlett March 20, 2023, 2:16 p.m. UTC | #1
Sorry for the late review, I've been away.

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

* Vlastimil Babka <vbabka@suse.cz> [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
>