提交 35be0681 编写于 作者: G Greg Kroah-Hartman

Kobject: change drivers/infiniband to use kobject_init_and_add

Stop using kobject_register, as this way we can control the sending of
the uevent properly, after everything is properly initialized.

Cc: Roland Dreier <rolandd@cisco.com>
Cc: Sean Hefty <mshefty@ichips.intel.com>
Cc: Hal Rosenstock <hal.rosenstock@gmail.com>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 901195ed
...@@ -508,19 +508,10 @@ static int add_port(struct ib_device *device, int port_num) ...@@ -508,19 +508,10 @@ static int add_port(struct ib_device *device, int port_num)
p->ibdev = device; p->ibdev = device;
p->port_num = port_num; p->port_num = port_num;
p->kobj.ktype = &port_type;
p->kobj.parent = kobject_get(&device->ports_parent); ret = kobject_init_and_add(&p->kobj, &port_type,
if (!p->kobj.parent) { kobject_get(device->ports_parent),
ret = -EBUSY; "%d", port_num);
goto err;
}
ret = kobject_set_name(&p->kobj, "%d", port_num);
if (ret)
goto err_put;
ret = kobject_register(&p->kobj);
if (ret) if (ret)
goto err_put; goto err_put;
...@@ -549,6 +540,7 @@ static int add_port(struct ib_device *device, int port_num) ...@@ -549,6 +540,7 @@ static int add_port(struct ib_device *device, int port_num)
list_add_tail(&p->kobj.entry, &device->port_list); list_add_tail(&p->kobj.entry, &device->port_list);
kobject_uevent(&p->kobj, KOBJ_ADD);
return 0; return 0;
err_free_pkey: err_free_pkey:
...@@ -570,9 +562,7 @@ static int add_port(struct ib_device *device, int port_num) ...@@ -570,9 +562,7 @@ static int add_port(struct ib_device *device, int port_num)
sysfs_remove_group(&p->kobj, &pma_group); sysfs_remove_group(&p->kobj, &pma_group);
err_put: err_put:
kobject_put(&device->ports_parent); kobject_put(device->ports_parent);
err:
kfree(p); kfree(p);
return ret; return ret;
} }
...@@ -694,16 +684,9 @@ int ib_device_register_sysfs(struct ib_device *device) ...@@ -694,16 +684,9 @@ int ib_device_register_sysfs(struct ib_device *device)
goto err_unregister; goto err_unregister;
} }
device->ports_parent.parent = kobject_get(&class_dev->kobj); device->ports_parent = kobject_create_and_add("ports",
if (!device->ports_parent.parent) { kobject_get(&class_dev->kobj));
ret = -EBUSY; if (!device->ports_parent)
goto err_unregister;
}
ret = kobject_set_name(&device->ports_parent, "ports");
if (ret)
goto err_put;
ret = kobject_register(&device->ports_parent);
if (ret)
goto err_put; goto err_put;
if (device->node_type == RDMA_NODE_IB_SWITCH) { if (device->node_type == RDMA_NODE_IB_SWITCH) {
...@@ -758,7 +741,7 @@ void ib_device_unregister_sysfs(struct ib_device *device) ...@@ -758,7 +741,7 @@ void ib_device_unregister_sysfs(struct ib_device *device)
kobject_unregister(p); kobject_unregister(p);
} }
kobject_unregister(&device->ports_parent); kobject_unregister(device->ports_parent);
class_device_unregister(&device->class_dev); class_device_unregister(&device->class_dev);
} }
......
...@@ -1026,7 +1026,7 @@ struct ib_device { ...@@ -1026,7 +1026,7 @@ struct ib_device {
struct module *owner; struct module *owner;
struct class_device class_dev; struct class_device class_dev;
struct kobject ports_parent; struct kobject *ports_parent;
struct list_head port_list; struct list_head port_list;
enum { enum {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册