- insert_vm_struct(mm, mpnt);
- // mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
- vx_vmpages_sub(mm, mm->total_vm -
- ((mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT));
+ if ((ret = insert_vm_struct(mm, mpnt))) {
+ up_write(&mm->mmap_sem);
+ kmem_cache_free(vm_area_cachep, mpnt);
+ return ret;
+ }
+ vx_vmpages_sub(mm, mm->total_vm - vma_pages(mpnt));
+ mm->stack_vm = mm->total_vm;