• K
    oom-kill: fix NUMA constraint check with nodemask · 4365a567
    KAMEZAWA Hiroyuki 提交于
    Fix node-oriented allocation handling in oom-kill.c I myself think of this
    as a bugfix not as an ehnancement.
    
    In these days, things are changed as
      - alloc_pages() eats nodemask as its arguments, __alloc_pages_nodemask().
      - mempolicy don't maintain its own private zonelists.
      (And cpuset doesn't use nodemask for __alloc_pages_nodemask())
    
    So, current oom-killer's check function is wrong.
    
    This patch does
      - check nodemask, if nodemask && nodemask doesn't cover all
        node_states[N_HIGH_MEMORY], this is CONSTRAINT_MEMORY_POLICY.
      - Scan all zonelist under nodemask, if it hits cpuset's wall
        this faiulre is from cpuset.
    And
      - modifies the caller of out_of_memory not to call oom if __GFP_THISNODE.
        This doesn't change "current" behavior. If callers use __GFP_THISNODE
        it should handle "page allocation failure" by itself.
    
      - handle __GFP_NOFAIL+__GFP_THISNODE path.
        This is something like a FIXME but this gfpmask is not used now.
    
    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: NKAMEZAWA Hiroyuki <kamezawa.hioryu@jp.fujitsu.com>
    Acked-by: NDavid Rientjes <rientjes@google.com>
    Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Christoph Lameter <cl@linux-foundation.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    4365a567
page_alloc.c 139.0 KB