On 07/21/2017 04:39 PM, Michal Hocko wrote: > From: Michal Hocko <mhocko@xxxxxxxx> > > 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. > > Changes since v1 > - build_zonelists_node -> build_zonerefs_node and operate directly on > zonerefs array rather than play tricks with index into the array. > - give build_zonelists_in_node_order nr_nodes to not iterate over all > MAX_NUMNODES as per Mel > > Signed-off-by: Michal Hocko <mhocko@xxxxxxxx> Acked-by: Vlastimil Babka <vbabka@xxxxxxx> -- 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>