lkml.org 
[lkml]   [2008]   [Sep]   [18]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
DateThu, 18 Sep 2008 13:54:30 -0700
FromAndrew Morton <>
SubjectRe: [-mm][PATCH 4/4] Add memrlimit controller accounting and control (v4)
On Wed, 14 May 2008 18:39:51 +0530
Balbir Singh <balbir@linux.vnet.ibm.com> wrote:

> This patch adds support for accounting and control of virtual address space
> limits.


Large changes in linux-next's arch/x86/kernel/ptrace.c caused damage to
the memrlimit patches.

I decided to retain the patches because it looks repairable.  The
problem is this reject from
memrlimit-add-memrlimit-controller-accounting-and-control.patch:

***************
*** 808,828 ****
  	current->mm->total_vm  -= old_size;
  	current->mm->locked_vm -= old_size;

  	if (size == 0)
  		goto out;
  	rlim = current->signal->rlim[RLIMIT_AS].rlim_cur >> PAGE_SHIFT;
  	vm = current->mm->total_vm  + size;
  	if (rlim < vm) {
  		ret = -ENOMEM;
  		if (!reduce_size)
- 			goto out;
  		size = rlim - current->mm->total_vm;
  		if (size <= 0)
- 			goto out;
  	}
  	rlim = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur >> PAGE_SHIFT;
--- 809,833 ----
  	current->mm->total_vm  -= old_size;
  	current->mm->locked_vm -= old_size;
+ 	memrlimit_cgroup_uncharge_as(mm, old_size);

  	if (size == 0)
  		goto out;
+ 	if (memrlimit_cgroup_charge_as(current->mm, size))
+ 		goto out;
+ 
  	rlim = current->signal->rlim[RLIMIT_AS].rlim_cur >> PAGE_SHIFT;
  	vm = current->mm->total_vm  + size;
  	if (rlim < vm) {
  		ret = -ENOMEM;
  		if (!reduce_size)
+ 			goto out_uncharge;
  		size = rlim - current->mm->total_vm;
  		if (size <= 0)
+ 			goto out_uncharge;
  	}
  	rlim = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur >> PAGE_SHIFT;
***************
*** 831,851 ****
  		ret = -ENOMEM;
  		if (!reduce_size)
- 			goto out;
  		size = rlim - current->mm->locked_vm;
  		if (size <= 0)
- 			goto out;
  	}
  	ret = ds_allocate((void **)&child->thread.ds_area_msr,
  			  size << PAGE_SHIFT);
  	if (ret < 0)
- 		goto out;
  	current->mm->total_vm  += size;
  	current->mm->locked_vm += size;

  out:
  	if (child->thread.ds_area_msr)
  		set_tsk_thread_flag(child, TIF_DS_AREA_MSR);
--- 836,859 ----
  		ret = -ENOMEM;
  		if (!reduce_size)
+ 			goto out_uncharge;
  		size = rlim - current->mm->locked_vm;
  		if (size <= 0)
+ 			goto out_uncharge;
  	}
  	ret = ds_allocate((void **)&child->thread.ds_area_msr,
  			  size << PAGE_SHIFT);
  	if (ret < 0)
+ 		goto out_uncharge;
  	current->mm->total_vm  += size;
  	current->mm->locked_vm += size;

+ out_uncharge:
+ 	if (ret < 0)
+ 		memrlimit_cgroup_uncharge_as(mm, size);
  out:
  	if (child->thread.ds_area_msr)
  		set_tsk_thread_flag(child, TIF_DS_AREA_MSR);


could you plese take a look at today's mmotm and see what needs to be
done to salvage it?  Most of the code you were altering got moved into
arch/x86/kernel/ds.c and got changed rather a lot.


Thanks.


\
 
 \ /
  Last update: 2008-09-18 22:57    [from the cache]
©2003-2008