IB/core: Remove unneeded kobject_get/put calls
authorHaggai Eran <haggaie@mellanox.com>
Sun, 18 May 2014 08:12:24 +0000 (11:12 +0300)
committerRoland Dreier <roland@purestorage.com>
Wed, 4 Jun 2014 17:03:49 +0000 (10:03 -0700)
The ib_core module will call kobject_get on the parent object of each
kobject it creates.  This is redundant since kobject_add does that
anyway.

As a side effect, this patch should fix leaking the ports kobject and
the device kobject during unregister flow, since the previous code
didn't seem to take into account the kobject_get calls on behalf of
the child kobjects.

Signed-off-by: Haggai Eran <haggaie@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/core/sysfs.c

index 7d3292c7b4b4fa53cf8dbb928998ecddb7bd1094..1f77072fa1fe9256f8e5fff15450321c362686d2 100644 (file)
@@ -534,7 +534,7 @@ static int add_port(struct ib_device *device, int port_num,
        p->port_num   = port_num;
 
        ret = kobject_init_and_add(&p->kobj, &port_type,
-                                  kobject_get(device->ports_parent),
+                                  device->ports_parent,
                                   "%d", port_num);
        if (ret)
                goto err_put;
@@ -599,7 +599,6 @@ err_remove_pma:
        sysfs_remove_group(&p->kobj, &pma_group);
 
 err_put:
-       kobject_put(device->ports_parent);
        kfree(p);
        return ret;
 }
@@ -835,7 +834,7 @@ int ib_device_register_sysfs(struct ib_device *device,
        }
 
        device->ports_parent = kobject_create_and_add("ports",
-                                       kobject_get(&class_dev->kobj));
+                                                     &class_dev->kobj);
        if (!device->ports_parent) {
                ret = -ENOMEM;
                goto err_put;
@@ -876,8 +875,6 @@ err_put:
                }
        }
 
-       kobject_put(&class_dev->kobj);
-
 err_unregister:
        device_unregister(class_dev);