based on http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=1830794ae6392ce12d36dbcc5ff52f11298ddab6 --- a/drivers/base/node.c 2012-09-30 15:48:35.000000000 +0400 +++ b/drivers/base/node.c 2012-09-30 15:51:52.000000000 +0400 @@ -275,12 +275,20 @@ int register_cpu_under_node(unsigned int cpu, unsigned int nid) { if (node_online(nid)) { + int ret; struct sys_device *obj = get_cpu_sysdev(cpu); + if (!obj) return 0; - return sysfs_create_link(&node_devices[nid].sysdev.kobj, + ret = sysfs_create_link(&node_devices[nid].sysdev.kobj, &obj->kobj, kobject_name(&obj->kobj)); + if (ret) + return ret; + + return sysfs_create_link(&obj->kobj, + &node_devices[nid].sysdev.kobj, + kobject_name(&node_devices[nid].sysdev.kobj)); } return 0; @@ -293,6 +301,8 @@ if (obj) sysfs_remove_link(&node_devices[nid].sysdev.kobj, kobject_name(&obj->kobj)); + sysfs_remove_link(&obj->kobj, + kobject_name(&node_devices[nid].sysdev.kobj)); } return 0; }