Skip to content
Snippets Groups Projects
Commit 396a44cc authored by Liam R. Howlett's avatar Liam R. Howlett Committed by Andrew Morton
Browse files

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.com


Signed-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
No related branches found
No related tags found
No related merge requests found
...@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment