• Michal Hocko's avatar
    mm, page_alloc: simplify zonelist initialization · 9d3be21b
    Michal Hocko authored
    build_zonelists gradually builds zonelists from the nearest to the most
    distant node.  As we do not know how many populated zones we will have
    in each node we rely on the _zoneref to terminate initialized part of
    the zonelist by a NULL zone.  While this is functionally correct it is
    quite suboptimal because we cannot allow updaters to race with zonelists
    users because they could see an empty zonelist and fail the allocation
    or hit the OOM killer in the worst case.
    
    We can do much better, though.  We can store the node ordering into an
    already existing node_order array and then give this array to
    build_zonelists_in_node_order and do the whole initialization at once.
    zonelists consumers still might see halfway initialized state but that
    should be much more tolerateable because the list will not be empty and
    they would either see some zone twice or skip over some zone(s) in the
    worst case which shouldn't lead to immediate failures.
    
    While at it let's simplify build_zonelists_node which is rather
    confusing now.  It gets an index into the zoneref array and returns the
    updated index for the next iteration.  Let's rename the function to
    build_zonerefs_node to better reflect its purpose and give it zoneref
    array to update.  The function doesn't the index anymore.  It just
    returns the number of added zones so that the caller can advance the
    zonered array start for the next update.
    
    This patch alone doesn't introduce any functional change yet, though, it
    is merely a preparatory work for later changes.
    
    Link: http://lkml.kernel.org/r/20170721143915.14161-7-mhocko@kernel.orgSigned-off-by: default avatarMichal Hocko <mhocko@suse.com>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Joonsoo Kim <js1304@gmail.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Shaohua Li <shaohua.li@intel.com>
    Cc: Toshi Kani <toshi.kani@hpe.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9d3be21b
page_alloc.c 210 KB