From: Liam R. Howlett Date: Fri, 16 Jun 2023 17:55:11 +0000 (-0400) Subject: attempt 2 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Fv6.4-rc5_stack;p=users%2Fjedix%2Flinux-maple.git attempt 2 Signed-off-by: Liam R. Howlett --- diff --git a/mm/memory.c b/mm/memory.c index 44d10fa417be..a9b587633878 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -5349,19 +5349,14 @@ struct vm_area_struct *lock_mm_and_find_vma(struct mm_struct *mm, return NULL; } err = expand_stack(vma, addr, false); - if (unlikely(err)){ - if (err != -EAGAIN) { - mmap_read_unlock(mm); - return NULL; - } + if (err == -EAGAIN){ if (!upgrade_mmap_lock_carefully(mm, regs)) return NULL; - vma = find_vma(mm, addr); - if (!vma || expand_stack(vma, addr, true)) { - mmap_write_unlock(mm); - return NULL; - } + vma = find_extend_vma_locked(mm, addr, true); mmap_write_downgrade(mm); + } else if (err) { + mmap_read_unlock(mm); + return NULL; } return vma; } @@ -5416,9 +5411,7 @@ struct vm_area_struct *find_extend_vma_locked(struct mm_struct *mm, return vma; start = vma->vm_start; err = expand_stack(vma, addr, write_locked); - if (unlikely(err)) { - if (err != -EAGAIN) - return NULL; + if (err == -EAGAIN) { if (!upgrade_mmap_lock_carefully(mm, NULL)) return NULL; vma = find_vma(mm, addr); @@ -5427,6 +5420,8 @@ struct vm_area_struct *find_extend_vma_locked(struct mm_struct *mm, return NULL; } mmap_write_downgrade(mm); + } else if (err) { + return NULL; } if (vma->vm_flags & VM_LOCKED) populate_vma_page_range(vma, addr, start, NULL);