out_of_memory() does not panic when sysctl_panic_on_oom is set if constrained_alloc() does not return CONSTRAINT_NONE. Instead, out_of_memory() kills the current process whenever constrained_alloc() returns either CONSTRAINT_MEMORY_POLICY or CONSTRAINT_CPUSET. This patch fixes this problem:
Signed-off-by: Larry Woodman <[EMAIL PROTECTED]>
--- linux-2.6.18.noarch/mm/oom_kill.c.orig +++ linux-2.6.18.noarch/mm/oom_kill.c @@ -431,6 +437,9 @@ void out_of_memory(struct zonelist *zone cpuset_lock(); read_lock(&tasklist_lock); + /* check if we are going to panic before enything else... */ + if (sysctl_panic_on_oom) + panic("out of memory. panic_on_oom is selected\n"); /* * Check if there were limitations on the allocation (only relevant for * NUMA) that may require different handling. @@ -447,8 +456,6 @@ void out_of_memory(struct zonelist *zone break; case CONSTRAINT_NONE: - if (sysctl_panic_on_oom) - panic("out of memory. panic_on_oom is selected\n"); retry: /* * Rambo mode: Shoot down a process and hope it solves whatever