]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
attempt 2 v6.4-rc5_stack
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Fri, 16 Jun 2023 17:55:11 +0000 (13:55 -0400)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Fri, 16 Jun 2023 17:55:11 +0000 (13:55 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
mm/memory.c

index 44d10fa417be0ab17b1d0ccc915ac3d27b0d834b..a9b587633878323ef4a597683d760b4a64e024c3 100644 (file)
@@ -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);