|
@@ -224,6 +224,12 @@ static unsigned long move_vma(struct vm_area_struct *vma,
|
|
|
split = 1;
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * if we failed to move page tables we still do total_vm increment
|
|
|
+ * since do_munmap() will decrement it by old_len == new_len
|
|
|
+ */
|
|
|
+ mm->total_vm += new_len >> PAGE_SHIFT;
|
|
|
+
|
|
|
if (do_munmap(mm, old_addr, old_len) < 0) {
|
|
|
/* OOM: unable to split vma, just get accounts right */
|
|
|
vm_unacct_memory(excess >> PAGE_SHIFT);
|
|
@@ -237,7 +243,6 @@ static unsigned long move_vma(struct vm_area_struct *vma,
|
|
|
vma->vm_next->vm_flags |= VM_ACCOUNT;
|
|
|
}
|
|
|
|
|
|
- mm->total_vm += new_len >> PAGE_SHIFT;
|
|
|
__vm_stat_account(mm, vma->vm_flags, vma->vm_file, new_len>>PAGE_SHIFT);
|
|
|
if (vm_flags & VM_LOCKED) {
|
|
|
mm->locked_vm += new_len >> PAGE_SHIFT;
|