X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fexec.c;h=c10a7d9c6c43159c8af548b60b3d97d641c858aa;hb=a8e794ca871505c8ea96cc102f4ad555c5231d7f;hp=f73d2c4cc1e602e7fced42659d2af67ad23e896e;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/fs/exec.c b/fs/exec.c index f73d2c4cc..c10a7d9c6 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -327,7 +327,8 @@ void put_dirty_page(struct task_struct *tsk, struct page *page, set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(page, prot)))); pte_chain = page_add_rmap(page, pte, pte_chain); pte_unmap(pte); - tsk->mm->rss++; + // tsk->mm->rss++; + vx_rsspages_inc(tsk->mm); spin_unlock(&tsk->mm->page_table_lock); /* no need for flush_tlb */ @@ -409,7 +410,8 @@ int setup_arg_pages(struct linux_binprm *bprm, int executable_stack) if (!mpnt) return -ENOMEM; - if (security_vm_enough_memory(arg_size >> PAGE_SHIFT)) { + if (security_vm_enough_memory(arg_size >> PAGE_SHIFT) || + !vx_vmpages_avail(mm, arg_size >> PAGE_SHIFT)) { kmem_cache_free(vm_area_cachep, mpnt); return -ENOMEM; } @@ -441,7 +443,9 @@ int setup_arg_pages(struct linux_binprm *bprm, int executable_stack) INIT_LIST_HEAD(&mpnt->shared); mpnt->vm_private_data = (void *) 0; insert_vm_struct(mm, mpnt); - mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT; + // 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)); } for (i = 0 ; i < MAX_ARG_PAGES ; i++) {