mm, hotplug: fix error handling in mem_online_node()
authorDavid Rientjes <rientjes@google.com>
Thu, 23 Jun 2011 01:13:01 +0000 (18:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 23 Jun 2011 04:06:47 +0000 (21:06 -0700)
The error handling in mem_online_node() is incorrect: hotadd_new_pgdat()
returns NULL if the new pgdat could not have been allocated and a pointer
to it otherwise.

mem_online_node() should fail if hotadd_new_pgdat() fails, not the
inverse.  This fixes an issue when memoryless nodes are not onlined and
their sysfs interface is not registered when their first cpu is brought
up.

The bug was introduced by commit cf23422b9d76 ("cpu/mem hotplug: enable
CPUs online before local memory online") iow v2.6.35.

Signed-off-by: David Rientjes <rientjes@google.com>
Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/memory_hotplug.c

index 02159c755136ea0463f57a2a951f9cad223aceb1..78dba9f04b5b7132d6e9c4090be80e0288d1633f 100644 (file)
@@ -521,7 +521,7 @@ int mem_online_node(int nid)
 
        lock_memory_hotplug();
        pgdat = hotadd_new_pgdat(nid, 0);
-       if (pgdat) {
+       if (!pgdat) {
                ret = -ENOMEM;
                goto out;
        }