Commit 396a44cc authored by Liam R. Howlett's avatar Liam R. Howlett Committed by Andrew Morton

mm/mremap: use vma_find_intersection() instead of vma linked list

Using the vma_find_intersection() call allows for cleaner code and
removes linked list users in preparation of the linked list removal.

Also remove one user of the linked list at the same time in favour of
find_vma().

Link: https://lkml.kernel.org/r/20220906194824.2110408-60-Liam.Howlett@oracle.comSigned-off-by: default avatarLiam R. Howlett <Liam.Howlett@Oracle.com>
Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
Reviewed-by: default avatarDavidlohr Bueso <dave@stgolabs.net>
Tested-by: default avatarYu Zhao <yuzhao@google.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: David Howells <dhowells@redhat.com>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: SeongJae Park <sj@kernel.org>
Cc: Sven Schnelle <svens@linux.ibm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 70821e0b
...@@ -716,7 +716,7 @@ static unsigned long move_vma(struct vm_area_struct *vma, ...@@ -716,7 +716,7 @@ static unsigned long move_vma(struct vm_area_struct *vma,
if (excess) { if (excess) {
vma->vm_flags |= VM_ACCOUNT; vma->vm_flags |= VM_ACCOUNT;
if (split) if (split)
vma->vm_next->vm_flags |= VM_ACCOUNT; find_vma(mm, vma->vm_end)->vm_flags |= VM_ACCOUNT;
} }
return new_addr; return new_addr;
...@@ -866,9 +866,10 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len, ...@@ -866,9 +866,10 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
static int vma_expandable(struct vm_area_struct *vma, unsigned long delta) static int vma_expandable(struct vm_area_struct *vma, unsigned long delta)
{ {
unsigned long end = vma->vm_end + delta; unsigned long end = vma->vm_end + delta;
if (end < vma->vm_end) /* overflow */ if (end < vma->vm_end) /* overflow */
return 0; return 0;
if (vma->vm_next && vma->vm_next->vm_start < end) /* intersection */ if (find_vma_intersection(vma->vm_mm, vma->vm_end, end))
return 0; return 0;
if (get_unmapped_area(NULL, vma->vm_start, end - vma->vm_start, if (get_unmapped_area(NULL, vma->vm_start, end - vma->vm_start,
0, MAP_FIXED) & ~PAGE_MASK) 0, MAP_FIXED) & ~PAGE_MASK)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment