static vm_fault_t __do_page_fault(struct mm_struct *mm, unsigned long addr,
                           unsigned int mm_flags, unsigned long vm_flags)
 {
-       struct vm_area_struct *vma;
-       vm_fault_t fault;
+       struct vm_area_struct *vma = find_vma(mm, addr);
 
-       vma = find_vma(mm, addr);
-       fault = VM_FAULT_BADMAP;
        if (unlikely(!vma))
-               goto out;
-       if (unlikely(vma->vm_start > addr))
-               goto check_stack;
+               return VM_FAULT_BADMAP;
 
        /*
         * Ok, we have a good vm_area for this memory access, so we can handle
         * it.
         */
-good_area:
+       if (unlikely(vma->vm_start > addr)) {
+               if (!(vma->vm_flags & VM_GROWSDOWN))
+                       return VM_FAULT_BADMAP;
+               if (expand_stack(vma, addr))
+                       return VM_FAULT_BADMAP;
+       }
+
        /*
         * Check that the permissions on the VMA allow for the fault which
         * occurred.
         */
-       if (!(vma->vm_flags & vm_flags)) {
-               fault = VM_FAULT_BADACCESS;
-               goto out;
-       }
-
+       if (!(vma->vm_flags & vm_flags))
+               return VM_FAULT_BADACCESS;
        return handle_mm_fault(vma, addr & PAGE_MASK, mm_flags);
-
-check_stack:
-       if (vma->vm_flags & VM_GROWSDOWN && !expand_stack(vma, addr))
-               goto good_area;
-out:
-       return fault;
 }
 
 static bool is_el0_instruction_abort(unsigned int esr)