}
 #endif /* CONFIG_DEBUG_VM_MAPLE_TREE */
 
+/* Actually perform the VMA merge operation. */
+static int commit_merge(struct vma_merge_struct *vmg,
+                       struct vm_area_struct *remove)
+{
+       struct vma_prepare vp;
+
+       init_multi_vma_prep(&vp, vmg->vma, NULL, remove, NULL);
+
+       /* Note: vma iterator must be pointing to 'start'. */
+       vma_iter_config(vmg->vmi, vmg->start, vmg->end);
+
+       if (vma_iter_prealloc(vmg->vmi, vmg->vma))
+               return -ENOMEM;
+
+       vma_prepare(&vp);
+       vma_adjust_trans_huge(vmg->vma, vmg->start, vmg->end, 0);
+       vma_set_range(vmg->vma, vmg->start, vmg->end, vmg->pgoff);
+
+       vma_iter_store(vmg->vmi, vmg->vma);
+
+       vma_complete(&vp, vmg->vmi, vmg->vma->vm_mm);
+
+       return 0;
+}
+
 /*
  * vma_merge_new_range - Attempt to merge a new VMA into address space
  *
        bool remove_next = false;
        struct vm_area_struct *vma = vmg->vma;
        struct vm_area_struct *next = vmg->next;
-       struct vma_prepare vp;
 
        mmap_assert_write_locked(vmg->mm);
 
                        return ret;
        }
 
-       init_multi_vma_prep(&vp, vma, NULL, remove_next ? next : NULL, NULL);
        /* Not merging but overwriting any part of next is not handled. */
-       VM_WARN_ON(next && !vp.remove &&
+       VM_WARN_ON(next && !remove_next &&
                  next != vma && vmg->end > next->vm_start);
        /* Only handles expanding */
        VM_WARN_ON(vma->vm_start < vmg->start || vma->vm_end > vmg->end);
 
-       /* Note: vma iterator must be pointing to 'start' */
-       vma_iter_config(vmg->vmi, vmg->start, vmg->end);
-       if (vma_iter_prealloc(vmg->vmi, vma))
+       if (commit_merge(vmg, remove_next ? next : NULL))
                goto nomem;
 
-       vma_prepare(&vp);
-       vma_adjust_trans_huge(vma, vmg->start, vmg->end, 0);
-       vma_set_range(vma, vmg->start, vmg->end, vmg->pgoff);
-       vma_iter_store(vmg->vmi, vma);
-
-       vma_complete(&vp, vmg->vmi, vma->vm_mm);
        return 0;
 
 nomem: