Message ID | 20230309111258.24079-2-vbabka@suse.cz (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | cleanup vma_merge() and improve mergeability tests | expand |
On Thu, Mar 09, 2023 at 12:12:49PM +0100, Vlastimil Babka wrote: > 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@suse.cz> > --- > 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 > Big improvement in readability already here. Reviewed-by: Lorenzo Stoakes <lstoakes@gmail.com>
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); } } }
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@suse.cz> --- mm/mmap.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)