->siglock is no longer needed to access task->signal, change oom_adjust_read() and oom_adjust_write() to read/write oom_adj lockless. Yes, this means that "echo 2 >oom_adj" and "echo 1 >oom_adj" can race and the second write can win, but I hope this is OK. Also, cleanup the EACCES case a bit. Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx> --- fs/proc/base.c | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) --- 34-rc1/fs/proc/base.c~PROC_5_OOM_ADJ 2010-03-30 18:23:50.000000000 +0200 +++ 34-rc1/fs/proc/base.c 2010-03-30 19:14:43.000000000 +0200 @@ -981,22 +981,16 @@ static ssize_t oom_adjust_read(struct fi { struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode); char buffer[PROC_NUMBUF]; + int oom_adjust; size_t len; - int oom_adjust = OOM_DISABLE; - unsigned long flags; if (!task) return -ESRCH; - if (lock_task_sighand(task, &flags)) { - oom_adjust = task->signal->oom_adj; - unlock_task_sighand(task, &flags); - } - + oom_adjust = task->signal->oom_adj; put_task_struct(task); len = snprintf(buffer, sizeof(buffer), "%i\n", oom_adjust); - return simple_read_from_buffer(buf, count, ppos, buffer, len); } @@ -1006,7 +1000,6 @@ static ssize_t oom_adjust_write(struct f struct task_struct *task; char buffer[PROC_NUMBUF]; long oom_adjust; - unsigned long flags; int err; memset(buffer, 0, sizeof(buffer)); @@ -1025,20 +1018,11 @@ static ssize_t oom_adjust_write(struct f task = get_proc_task(file->f_path.dentry->d_inode); if (!task) return -ESRCH; - if (!lock_task_sighand(task, &flags)) { - put_task_struct(task); - return -ESRCH; - } - - if (oom_adjust < task->signal->oom_adj && !capable(CAP_SYS_RESOURCE)) { - unlock_task_sighand(task, &flags); - put_task_struct(task); - return -EACCES; - } - task->signal->oom_adj = oom_adjust; - - unlock_task_sighand(task, &flags); + if (task->signal->oom_adj <= oom_adjust || capable(CAP_SYS_RESOURCE)) + task->signal->oom_adj = oom_adjust; + else + count = -EACCES; put_task_struct(task); return count; -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>