Skip to content
  • KOSAKI Motohiro's avatar
    mm: revert "oom: move oom_adj value" · 0753ba01
    KOSAKI Motohiro authored
    The commit 2ff05b2b (oom: move oom_adj value) moveed the oom_adj value to
    the mm_struct.  It was a very good first step for sanitize OOM.
    
    However Paul Menage reported the commit makes regression to his job
    scheduler.  Current OOM logic can kill OOM_DISABLED process.
    
    Why? His program has the code of similar to the following.
    
    	...
    	set_oom_adj(OOM_DISABLE); /* The job scheduler never killed by oom */
    	...
    	if (vfork() == 0) {
    		set_oom_adj(0); /* Invoked child can be killed */
    		execve("foo-bar-cmd");
    	}
    	....
    
    vfork() parent and child are shared the same mm_struct.  then above
    set_oom_adj(0) doesn't only change oom_adj for vfork() child, it's also
    change oom_adj for vfork() parent.  Then, vfork() parent (job scheduler)
    lost OOM immune and it was killed.
    
    Actually, fork-setting-exec idiom is very frequently used in userland program.
    We must not break this assumption.
    
    Then, this patch revert commit 2ff05b2b and related commit.
    
    Reverted commit list
    ---------------------
    - commit 2ff05b2b (oom: move oom_adj value from task_struct to mm_struct)
    - commit 4d8b9135 (oom: avoid unnecessary mm locking and scanning for OOM_DISABLE)
    - commit 81236810 (oom: only oom kill exiting tasks with attached memory)
    - commit 933b787b
    
     (mm: copy over oom_adj value at fork time)
    
    Signed-off-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Paul Menage <menage@google.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Nick Piggin <npiggin@suse.de>
    Cc: Mel Gorman <mel@csn.ul.ie>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    0753ba01