[PATCH 01/10] mm/mmap/vma_merge: use only primary pointers for preparing merge

From: Vlastimil Babka
Date: Thu Mar 09 2023 - 06:18:00 EST


In the merging preparation part of vma_merge(), some vma pointer
variables are assigned for later execution of the merge, but also read
from in the block itself. The code is easier follow and check against
the cases diagram in the comment if the code reads only from the
"primary" vma variables prev, mid, next instead. No functional change.

Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx>
---
mm/mmap.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/mm/mmap.c b/mm/mmap.c
index 740b54be3ed4..0a8b052e3022 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -950,16 +950,16 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm,
is_mergeable_anon_vma(prev->anon_vma, next->anon_vma, NULL)) {
remove = mid; /* case 1 */
vma_end = next->vm_end;
- err = dup_anon_vma(res, remove);
+ err = dup_anon_vma(prev, mid);
if (mid != next) { /* case 6 */
remove2 = next;
- if (!remove->anon_vma)
- err = dup_anon_vma(res, remove2);
+ if (!mid->anon_vma)
+ err = dup_anon_vma(prev, next);
}
} else if (merge_prev) {
err = 0; /* case 2 */
if (mid && end > mid->vm_start) {
- err = dup_anon_vma(res, mid);
+ err = dup_anon_vma(prev, mid);
if (end == mid->vm_end) { /* case 7 */
remove = mid;
} else { /* case 5 */
@@ -972,8 +972,8 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm,
if (prev && addr < prev->vm_end) { /* case 4 */
vma_end = addr;
adjust = mid;
- adj_next = -(vma->vm_end - addr);
- err = dup_anon_vma(adjust, prev);
+ adj_next = -(prev->vm_end - addr);
+ err = dup_anon_vma(mid, prev);
} else {
vma = next; /* case 3 */
vma_start = addr;
@@ -982,7 +982,7 @@ struct vm_area_struct *vma_merge(struct vma_iterator *vmi, struct mm_struct *mm,
err = 0;
if (mid != next) { /* case 8 */
remove = mid;
- err = dup_anon_vma(res, remove);
+ err = dup_anon_vma(next, mid);
}
}
}
--
2.39.2