@@ -788,11 +788,15 @@ int ib_register_device(struct ib_device *device, const char *name)
ib_device_register_rdmacg(device);
+ ret = device_add(&device->dev);
+ if (ret)
+ goto cg_cleanup;
+
ret = ib_device_register_sysfs(device);
if (ret) {
dev_warn(&device->dev,
"Couldn't register device with driver model\n");
- goto cg_cleanup;
+ goto dev_cleanup;
}
ret = enable_device(device);
@@ -803,6 +807,8 @@ int ib_register_device(struct ib_device *device, const char *name)
sysfs_cleanup:
ib_device_unregister_sysfs(device);
+dev_cleanup:
+ device_del(&device->dev);
cg_cleanup:
ib_device_unregister_rdmacg(device);
ib_cache_cleanup_one(device);
@@ -822,6 +828,7 @@ void ib_unregister_device(struct ib_device *device)
{
disable_device(device);
ib_device_unregister_sysfs(device);
+ device_del(&device->dev);
ib_device_unregister_rdmacg(device);
ib_cache_cleanup_one(device);
release_name(device);
@@ -1341,15 +1341,10 @@ int ib_device_register_sysfs(struct ib_device *device)
{
int ret;
- ret = device_add(&device->dev);
+ ret = ib_setup_port_attrs(&device->coredev);
if (ret)
return ret;
- ret = ib_setup_port_attrs(&device->coredev);
- if (ret) {
- device_del(&device->dev);
- return ret;
- }
if (device->ops.alloc_hw_stats)
setup_hw_stats(device, NULL, 0);
@@ -1363,6 +1358,4 @@ void ib_device_unregister_sysfs(struct ib_device *device)
kfree(device->hw_stats);
ib_free_port_attrs(&device->coredev);
- /* Balance with device_add */
- device_del(&device->dev);
}