mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-01 10:45:49 +00:00
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: Liam R. Howlett <Liam.Howlett@Oracle.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> Reviewed-by: Davidlohr Bueso <dave@stgolabs.net> Tested-by: Yu 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: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
70821e0b89
commit
396a44cc58
@ -716,7 +716,7 @@ static unsigned long move_vma(struct vm_area_struct *vma,
|
||||
if (excess) {
|
||||
vma->vm_flags |= VM_ACCOUNT;
|
||||
if (split)
|
||||
vma->vm_next->vm_flags |= VM_ACCOUNT;
|
||||
find_vma(mm, vma->vm_end)->vm_flags |= VM_ACCOUNT;
|
||||
}
|
||||
|
||||
return new_addr;
|
||||
@ -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)
|
||||
{
|
||||
unsigned long end = vma->vm_end + delta;
|
||||
|
||||
if (end < vma->vm_end) /* overflow */
|
||||
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;
|
||||
if (get_unmapped_area(NULL, vma->vm_start, end - vma->vm_start,
|
||||
0, MAP_FIXED) & ~PAGE_MASK)
|
||||
|
Loading…
Reference in New Issue
Block a user