diff options
Diffstat (limited to 'mm/mremap.c')
| -rw-r--r-- | mm/mremap.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/mm/mremap.c b/mm/mremap.c index 0dd7ace94e51..ec7238a78f36 100644 --- a/mm/mremap.c +++ b/mm/mremap.c | |||
| @@ -224,6 +224,12 @@ static unsigned long move_vma(struct vm_area_struct *vma, | |||
| 224 | split = 1; | 224 | split = 1; |
| 225 | } | 225 | } |
| 226 | 226 | ||
| 227 | /* | ||
| 228 | * if we failed to move page tables we still do total_vm increment | ||
| 229 | * since do_munmap() will decrement it by old_len == new_len | ||
| 230 | */ | ||
| 231 | mm->total_vm += new_len >> PAGE_SHIFT; | ||
| 232 | |||
| 227 | if (do_munmap(mm, old_addr, old_len) < 0) { | 233 | if (do_munmap(mm, old_addr, old_len) < 0) { |
| 228 | /* OOM: unable to split vma, just get accounts right */ | 234 | /* OOM: unable to split vma, just get accounts right */ |
| 229 | vm_unacct_memory(excess >> PAGE_SHIFT); | 235 | vm_unacct_memory(excess >> PAGE_SHIFT); |
| @@ -237,7 +243,6 @@ static unsigned long move_vma(struct vm_area_struct *vma, | |||
| 237 | vma->vm_next->vm_flags |= VM_ACCOUNT; | 243 | vma->vm_next->vm_flags |= VM_ACCOUNT; |
| 238 | } | 244 | } |
| 239 | 245 | ||
| 240 | mm->total_vm += new_len >> PAGE_SHIFT; | ||
| 241 | __vm_stat_account(mm, vma->vm_flags, vma->vm_file, new_len>>PAGE_SHIFT); | 246 | __vm_stat_account(mm, vma->vm_flags, vma->vm_file, new_len>>PAGE_SHIFT); |
| 242 | if (vm_flags & VM_LOCKED) { | 247 | if (vm_flags & VM_LOCKED) { |
| 243 | mm->locked_vm += new_len >> PAGE_SHIFT; | 248 | mm->locked_vm += new_len >> PAGE_SHIFT; |
