patch-2.6.6-vs1.9.0
[linux-2.6.git] / mm / mremap.c
index 9043076..82ceecd 100644 (file)
@@ -238,9 +238,11 @@ static unsigned long move_vma(struct vm_area_struct *vma,
                        vma->vm_next->vm_flags |= VM_ACCOUNT;
        }
 
-       mm->total_vm += new_len >> PAGE_SHIFT;
+       // mm->total_vm += new_len >> PAGE_SHIFT;
+       vx_vmpages_add(mm, new_len >> PAGE_SHIFT);
        if (vm_flags & VM_LOCKED) {
-               mm->locked_vm += new_len >> PAGE_SHIFT;
+               // mm->locked_vm += new_len >> PAGE_SHIFT;
+               vx_vmlocked_add(mm, new_len >> PAGE_SHIFT);
                if (new_len > old_len)
                        make_pages_present(new_addr + old_len,
                                           new_addr + new_len);
@@ -349,6 +351,9 @@ unsigned long do_mremap(unsigned long addr,
        if ((current->mm->total_vm << PAGE_SHIFT) + (new_len - old_len)
            > current->rlim[RLIMIT_AS].rlim_cur)
                goto out;
+       /* check context space, maybe only Private writable mapping? */
+       if (!vx_vmpages_avail(current->mm, (new_len - old_len) >> PAGE_SHIFT))
+               goto out;
 
        if (vma->vm_flags & VM_ACCOUNT) {
                charged = (new_len - old_len) >> PAGE_SHIFT;
@@ -371,9 +376,11 @@ unsigned long do_mremap(unsigned long addr,
                        spin_lock(&vma->vm_mm->page_table_lock);
                        vma->vm_end = addr + new_len;
                        spin_unlock(&vma->vm_mm->page_table_lock);
-                       current->mm->total_vm += pages;
+                       // current->mm->total_vm += pages;
+                       vx_vmpages_add(current->mm, pages);
                        if (vma->vm_flags & VM_LOCKED) {
-                               current->mm->locked_vm += pages;
+                               // current->mm->locked_vm += pages;
+                               vx_vmlocked_add(current->mm, pages);
                                make_pages_present(addr + old_len,
                                                   addr + new_len);
                        }