Jiang Liu 08dff7b7d6 mm/hotplug: correctly add new zone to all other nodes' zone lists
When online_pages() is called to add new memory to an empty zone, it
rebuilds all zone lists by calling build_all_zonelists().  But there's a
bug which prevents the new zone to be added to other nodes' zone lists.

online_pages() {
	build_all_zonelists()
	.....
	node_set_state(zone_to_nid(zone), N_HIGH_MEMORY)
}

Here the node of the zone is put into N_HIGH_MEMORY state after calling
build_all_zonelists(), but build_all_zonelists() only adds zones from
nodes in N_HIGH_MEMORY state to the fallback zone lists.
build_all_zonelists()

    ->__build_all_zonelists()
	->build_zonelists()
	    ->find_next_best_node()
		->for_each_node_state(n, N_HIGH_MEMORY)

So memory in the new zone will never be used by other nodes, and it may
cause strange behavor when system is under memory pressure.  So put node
into N_HIGH_MEMORY state before calling build_all_zonelists().

Signed-off-by: Jianguo Wu <wujianguo@huawei.com>
Signed-off-by: Jiang Liu <liuj97@gmail.com>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Michal Hocko <mhocko@suse.cz>
Cc: Minchan Kim <minchan@kernel.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Keping Chen <chenkeping@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2012-07-31 18:42:44 -07:00
..
2012-05-29 23:28:33 -04:00
2012-01-03 22:54:56 -05:00
2011-07-26 16:49:47 -07:00
2012-07-31 18:42:43 -07:00
2012-07-31 18:42:43 -07:00
2010-05-21 18:31:21 -04:00
2012-06-04 17:17:31 -04:00
2012-07-31 18:42:43 -07:00
2012-07-31 18:42:43 -07:00
2012-06-20 14:39:36 -07:00
2012-06-20 14:39:36 -07:00
2011-05-20 12:50:29 -07:00
2012-05-29 16:22:19 -07:00
2012-07-14 16:34:47 +04:00
2012-07-12 10:13:22 +03:00
2012-05-29 16:22:28 -07:00
2012-05-29 16:22:23 -07:00
2012-06-01 10:37:18 -04:00
2012-07-31 18:42:39 -07:00
2012-07-31 18:42:43 -07:00