oom: remove deprecated oom_adj
The deprecated /proc/<pid>/oom_adj is scheduled for removal this month. Signed-off-by: Davidlohr Bueso <dave@gnu.org> Acked-by: David Rientjes <rientjes@google.com> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:

committed by
Linus Torvalds

parent
d5dc0ad928
commit
01dc52ebdf
117
fs/proc/base.c
117
fs/proc/base.c
@@ -873,111 +873,6 @@ static const struct file_operations proc_environ_operations = {
|
||||
.release = mem_release,
|
||||
};
|
||||
|
||||
static ssize_t oom_adjust_read(struct file *file, char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct task_struct *task = get_proc_task(file->f_path.dentry->d_inode);
|
||||
char buffer[PROC_NUMBUF];
|
||||
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);
|
||||
}
|
||||
|
||||
put_task_struct(task);
|
||||
|
||||
len = snprintf(buffer, sizeof(buffer), "%i\n", oom_adjust);
|
||||
|
||||
return simple_read_from_buffer(buf, count, ppos, buffer, len);
|
||||
}
|
||||
|
||||
static ssize_t oom_adjust_write(struct file *file, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct task_struct *task;
|
||||
char buffer[PROC_NUMBUF];
|
||||
int oom_adjust;
|
||||
unsigned long flags;
|
||||
int err;
|
||||
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
if (count > sizeof(buffer) - 1)
|
||||
count = sizeof(buffer) - 1;
|
||||
if (copy_from_user(buffer, buf, count)) {
|
||||
err = -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = kstrtoint(strstrip(buffer), 0, &oom_adjust);
|
||||
if (err)
|
||||
goto out;
|
||||
if ((oom_adjust < OOM_ADJUST_MIN || oom_adjust > OOM_ADJUST_MAX) &&
|
||||
oom_adjust != OOM_DISABLE) {
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
task = get_proc_task(file->f_path.dentry->d_inode);
|
||||
if (!task) {
|
||||
err = -ESRCH;
|
||||
goto out;
|
||||
}
|
||||
|
||||
task_lock(task);
|
||||
if (!task->mm) {
|
||||
err = -EINVAL;
|
||||
goto err_task_lock;
|
||||
}
|
||||
|
||||
if (!lock_task_sighand(task, &flags)) {
|
||||
err = -ESRCH;
|
||||
goto err_task_lock;
|
||||
}
|
||||
|
||||
if (oom_adjust < task->signal->oom_adj && !capable(CAP_SYS_RESOURCE)) {
|
||||
err = -EACCES;
|
||||
goto err_sighand;
|
||||
}
|
||||
|
||||
/*
|
||||
* Warn that /proc/pid/oom_adj is deprecated, see
|
||||
* Documentation/feature-removal-schedule.txt.
|
||||
*/
|
||||
printk_once(KERN_WARNING "%s (%d): /proc/%d/oom_adj is deprecated, please use /proc/%d/oom_score_adj instead.\n",
|
||||
current->comm, task_pid_nr(current), task_pid_nr(task),
|
||||
task_pid_nr(task));
|
||||
task->signal->oom_adj = oom_adjust;
|
||||
/*
|
||||
* Scale /proc/pid/oom_score_adj appropriately ensuring that a maximum
|
||||
* value is always attainable.
|
||||
*/
|
||||
if (task->signal->oom_adj == OOM_ADJUST_MAX)
|
||||
task->signal->oom_score_adj = OOM_SCORE_ADJ_MAX;
|
||||
else
|
||||
task->signal->oom_score_adj = (oom_adjust * OOM_SCORE_ADJ_MAX) /
|
||||
-OOM_DISABLE;
|
||||
trace_oom_score_adj_update(task);
|
||||
err_sighand:
|
||||
unlock_task_sighand(task, &flags);
|
||||
err_task_lock:
|
||||
task_unlock(task);
|
||||
put_task_struct(task);
|
||||
out:
|
||||
return err < 0 ? err : count;
|
||||
}
|
||||
|
||||
static const struct file_operations proc_oom_adjust_operations = {
|
||||
.read = oom_adjust_read,
|
||||
.write = oom_adjust_write,
|
||||
.llseek = generic_file_llseek,
|
||||
};
|
||||
|
||||
static ssize_t oom_score_adj_read(struct file *file, char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
@@ -1051,15 +946,7 @@ static ssize_t oom_score_adj_write(struct file *file, const char __user *buf,
|
||||
if (has_capability_noaudit(current, CAP_SYS_RESOURCE))
|
||||
task->signal->oom_score_adj_min = oom_score_adj;
|
||||
trace_oom_score_adj_update(task);
|
||||
/*
|
||||
* Scale /proc/pid/oom_adj appropriately ensuring that OOM_DISABLE is
|
||||
* always attainable.
|
||||
*/
|
||||
if (task->signal->oom_score_adj == OOM_SCORE_ADJ_MIN)
|
||||
task->signal->oom_adj = OOM_DISABLE;
|
||||
else
|
||||
task->signal->oom_adj = (oom_score_adj * OOM_ADJUST_MAX) /
|
||||
OOM_SCORE_ADJ_MAX;
|
||||
|
||||
err_sighand:
|
||||
unlock_task_sighand(task, &flags);
|
||||
err_task_lock:
|
||||
@@ -2710,7 +2597,6 @@ static const struct pid_entry tgid_base_stuff[] = {
|
||||
REG("cgroup", S_IRUGO, proc_cgroup_operations),
|
||||
#endif
|
||||
INF("oom_score", S_IRUGO, proc_oom_score),
|
||||
REG("oom_adj", S_IRUGO|S_IWUSR, proc_oom_adjust_operations),
|
||||
REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),
|
||||
#ifdef CONFIG_AUDITSYSCALL
|
||||
REG("loginuid", S_IWUSR|S_IRUGO, proc_loginuid_operations),
|
||||
@@ -3077,7 +2963,6 @@ static const struct pid_entry tid_base_stuff[] = {
|
||||
REG("cgroup", S_IRUGO, proc_cgroup_operations),
|
||||
#endif
|
||||
INF("oom_score", S_IRUGO, proc_oom_score),
|
||||
REG("oom_adj", S_IRUGO|S_IWUSR, proc_oom_adjust_operations),
|
||||
REG("oom_score_adj", S_IRUGO|S_IWUSR, proc_oom_score_adj_operations),
|
||||
#ifdef CONFIG_AUDITSYSCALL
|
||||
REG("loginuid", S_IWUSR|S_IRUGO, proc_loginuid_operations),
|
||||
|
Reference in New Issue
Block a user