From: Michal Hocko <mhocko@xxxxxxx> A github user rfjakob has reported the following issue via IRC. <rfjakob> Manually triggering the OOM killer does not work anymore in 4.0.5 <rfjakob> This is what it looks like: https://gist.github.com/rfjakob/346b7dc611fc3cdf4011 <rfjakob> Basically, what happens is that the GPU driver frees some memory, that satisfies the OOM killer <rfjakob> But the memory is allocated immediately again, and in the, no processes are killed no matter how often you trigger the oom killer <rfjakob> "in the end" Quoting from the github: " [19291.202062] sysrq: SysRq : Manual OOM execution [19291.208335] Purging GPU memory, 74399744 bytes freed, 8728576 bytes still pinned. [19291.390767] sysrq: SysRq : Manual OOM execution [19291.396792] Purging GPU memory, 74452992 bytes freed, 8728576 bytes still pinned. [19291.560349] sysrq: SysRq : Manual OOM execution [19291.566018] Purging GPU memory, 75489280 bytes freed, 8728576 bytes still pinned. [19291.729944] sysrq: SysRq : Manual OOM execution [19291.735686] Purging GPU memory, 74399744 bytes freed, 8728576 bytes still pinned. [19291.918637] sysrq: SysRq : Manual OOM execution [19291.924299] Purging GPU memory, 74403840 bytes freed, 8728576 bytes still pinned. " The issue is that sysrq+f (force_kill) gets confused by the regular OOM heuristic which tries to prevent from OOM killer if some of the oom notifier can relase a memory. The heuristic doesn't make much sense for the sysrq+f path because this one is used by the administrator to kill a memory hog. Reported-by: Jakob Unterwurzacher <jakobunt@xxxxxxxxx> Signed-off-by: Michal Hocko <mhocko@xxxxxxx> --- mm/oom_kill.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mm/oom_kill.c b/mm/oom_kill.c index f2737d66f66a..0b1b0b25f928 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -661,10 +661,12 @@ bool out_of_memory(struct zonelist *zonelist, gfp_t gfp_mask, if (oom_killer_disabled) return false; - blocking_notifier_call_chain(&oom_notify_list, 0, &freed); - if (freed > 0) - /* Got some memory back in the last second. */ - goto out; + if (!force_kill) { + blocking_notifier_call_chain(&oom_notify_list, 0, &freed); + if (freed > 0) + /* Got some memory back in the last second. */ + goto out; + } /* * If current has a pending SIGKILL or is exiting, then automatically -- 2.1.4 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>