There's a concern that removing /proc/sys/vm/oom_kill_allocating_task will unnecessarily break the userspace API as the result of the oom killer rewrite. This patch reintroduces the sysctl and deprecates it by adding an entry to Documentation/feature-removal-schedule.txt with a suggested removal date of December 2011 and emitting a warning the first time it is written including the writing task's name and pid. /proc/sys/vm/oom_kill_allocating task mirrors the value of /proc/sys/vm/oom_kill_quick. Signed-off-by: David Rientjes <rientjes@xxxxxxxxxx> --- Documentation/feature-removal-schedule.txt | 19 +++++++++++++++++++ include/linux/oom.h | 2 ++ kernel/sysctl.c | 7 +++++++ mm/oom_kill.c | 14 ++++++++++++++ 4 files changed, 42 insertions(+), 0 deletions(-) diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt @@ -204,6 +204,25 @@ Who: David Rientjes <rientjes@xxxxxxxxxx> --------------------------- +What: /proc/sys/vm/oom_kill_allocating_task +When: December 2011 +Why: /proc/sys/vm/oom_kill_allocating_task is equivalent to + /proc/sys/vm/oom_kill_quick. The two sysctls will mirror each other's + value when set. + + Existing users of /proc/sys/vm/oom_kill_allocating_task should simply + write a non-zero value to /proc/sys/vm/oom_kill_quick. This will also + suppress a costly tasklist scan when dumping VM information for all + oom kill candidates. + + A warning will be emitted to the kernel log if an application uses this + deprecated interface. After it is printed once, future warning will be + suppressed until the kernel is rebooted. + +Who: David Rientjes <rientjes@xxxxxxxxxx> + +--------------------------- + What: remove EXPORT_SYMBOL(kernel_thread) When: August 2006 Files: arch/*/kernel/*_ksyms.c diff --git a/include/linux/oom.h b/include/linux/oom.h --- a/include/linux/oom.h +++ b/include/linux/oom.h @@ -67,5 +67,7 @@ extern int sysctl_panic_on_oom; extern int sysctl_oom_forkbomb_thres; extern int sysctl_oom_kill_quick; +extern int oom_kill_allocating_task_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos); #endif /* __KERNEL__*/ #endif /* _INCLUDE_LINUX_OOM_H */ diff --git a/kernel/sysctl.c b/kernel/sysctl.c --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -983,6 +983,13 @@ static struct ctl_table vm_table[] = { .proc_handler = proc_dointvec, }, { + .procname = "oom_kill_allocating_task", + .data = &sysctl_oom_kill_quick, + .maxlen = sizeof(sysctl_oom_kill_quick), + .mode = 0644, + .proc_handler = oom_kill_allocating_task_handler, + }, + { .procname = "oom_forkbomb_thres", .data = &sysctl_oom_forkbomb_thres, .maxlen = sizeof(sysctl_oom_forkbomb_thres), diff --git a/mm/oom_kill.c b/mm/oom_kill.c --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -37,6 +37,20 @@ int sysctl_oom_forkbomb_thres = DEFAULT_OOM_FORKBOMB_THRES; int sysctl_oom_kill_quick; static DEFINE_SPINLOCK(zone_scan_lock); +int oom_kill_allocating_task_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + int ret; + + ret = proc_dointvec(table, write, buffer, lenp, ppos); + if (!ret && write) + printk_once(KERN_WARNING "%s (%d): " + "/proc/sys/vm/oom_kill_allocating_task is deprecated, " + "please use /proc/sys/vm/oom_kill_quick instead.\n", + current->comm, task_pid_nr(current)); + return ret; +} + /* * Do all threads of the target process overlap our allowed nodes? * @tsk: task struct of which task to consider -- 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>