The patch titled oom: reintroduce and deprecate oom_kill_allocating_task has been added to the -mm tree. Its filename is oom-reintroduce-and-deprecate-oom_kill_allocating_task.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** See http://userweb.kernel.org/~akpm/stuff/added-to-mm.txt to find out what to do about this The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: oom: reintroduce and deprecate oom_kill_allocating_task From: David Rientjes <rientjes@xxxxxxxxxx> 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> Cc: Rik van Riel <riel@xxxxxxxxxx> Cc: Nick Piggin <npiggin@xxxxxxx> Cc: Balbir Singh <balbir@xxxxxxxxxxxxxxxxxx> Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> Cc: Minchan Kim <minchan.kim@xxxxxxxxx> Cc: KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- 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(+) diff -puN Documentation/feature-removal-schedule.txt~oom-reintroduce-and-deprecate-oom_kill_allocating_task Documentation/feature-removal-schedule.txt --- a/Documentation/feature-removal-schedule.txt~oom-reintroduce-and-deprecate-oom_kill_allocating_task +++ a/Documentation/feature-removal-schedule.txt @@ -174,6 +174,25 @@ Who: Eric Biederman <ebiederm@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 -puN include/linux/oom.h~oom-reintroduce-and-deprecate-oom_kill_allocating_task include/linux/oom.h --- a/include/linux/oom.h~oom-reintroduce-and-deprecate-oom_kill_allocating_task +++ a/include/linux/oom.h @@ -46,6 +46,8 @@ extern void out_of_memory(struct zonelis int order, nodemask_t *mask); extern int register_oom_notifier(struct notifier_block *nb); extern int unregister_oom_notifier(struct notifier_block *nb); +extern int oom_kill_allocating_task_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos); extern bool oom_killer_disabled; diff -puN kernel/sysctl.c~oom-reintroduce-and-deprecate-oom_kill_allocating_task kernel/sysctl.c --- a/kernel/sysctl.c~oom-reintroduce-and-deprecate-oom_kill_allocating_task +++ a/kernel/sysctl.c @@ -999,6 +999,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 -puN mm/oom_kill.c~oom-reintroduce-and-deprecate-oom_kill_allocating_task mm/oom_kill.c --- a/mm/oom_kill.c~oom-reintroduce-and-deprecate-oom_kill_allocating_task +++ a/mm/oom_kill.c @@ -38,6 +38,20 @@ int sysctl_oom_dump_tasks; int sysctl_oom_forkbomb_thres = DEFAULT_OOM_FORKBOMB_THRES; 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 _ Patches currently in -mm which might be from rientjes@xxxxxxxxxx are linux-next.patch hugetlbfs-kill-applications-that-use-map_noreserve-with-sigbus-instead-of-oom-killer.patch mempolicy-remove-redundant-code.patch oom-filter-tasks-not-sharing-the-same-cpuset.patch oom-sacrifice-child-with-highest-badness-score-for-parent.patch oom-select-task-from-tasklist-for-mempolicy-ooms.patch oom-remove-special-handling-for-pagefault-ooms.patch oom-badness-heuristic-rewrite.patch oom-reintroduce-and-deprecate-oom_kill_allocating_task.patch oom-deprecate-oom_adj-tunable.patch oom-replace-sysctls-with-quick-mode.patch oom-avoid-oom-killer-for-lowmem-allocations.patch oom-remove-unnecessary-code-and-cleanup.patch oom-default-to-killing-current-for-pagefault-ooms.patch oom-avoid-race-for-oom-killed-tasks-detaching-mm-prior-to-exit.patch oom-select_bad_process-check-pf_kthread-instead-of-mm-to-skip-kthreads.patch oom-select_bad_process-pf_exiting-check-should-take-mm-into-account.patch oom-introduce-find_lock_task_mm-to-fix-mm-false-positives.patch oom-oom_forkbomb_penalty-move-thread_group_cputime-out-of-task_lock.patch oom-hold-tasklist_lock-when-dumping-tasks.patch oom-give-current-access-to-memory-reserves-if-it-has-been-killed.patch oom-avoid-sending-exiting-tasks-a-sigkill.patch oom-clean-up-oom_kill_task.patch oom-clean-up-oom_badness.patch oom-select_bad_process-never-choose-tasks-with-badness-==-0.patch oom-avoid-divide-by-zero.patch mempolicy-remove-case-mpol_interleave-from-policy_zonelist.patch mempolicy-remove-redundant-check.patch mempolicy-dont-call-mpol_set_nodemask-when-no_context.patch mempolicy-lose-unnecessary-loop-variable-in-mpol_parse_str.patch mempolicy-rename-policy_types-and-cleanup-initialization.patch mempolicy-factor-mpol_shared_policy_init-return-paths.patch mempolicy-document-cpuset-interaction-with-tmpfs-mpol-mount-option.patch mm-default-to-node-zonelist-ordering-when-nodes-have-only-lowmem.patch oom-move-sysctl-declarations-to-oomh.patch memcg-oom-wakeup-filter.patch memcg-oom-wakeup-filter-update.patch memcg-oom-notifier.patch memcg-oom-notifier-update.patch memcg-oom-kill-disable-and-oom-status.patch memcg-oom-kill-disable-and-oom-status-update.patch numa-add-generic-percpu-var-numa_node_id-implementation.patch numa-x86_64-use-generic-percpu-var-numa_node_id-implementation.patch numa-ia64-use-generic-percpu-var-numa_node_id-implementation.patch numa-introduce-numa_mem_id-effective-local-memory-node-id.patch numa-ia64-support-numa_mem_id-for-memoryless-nodes.patch numa-slab-use-numa_mem_id-for-slab-local-memory-node.patch numa-in-kernel-profiling-use-cpu_to_mem-for-per-cpu-allocations.patch numa-update-documentation-vm-numa-add-memoryless-node-info.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html