powerpc/ibmebus: Fix device reference leaks in sysfs interface

Make sure to drop any reference taken by bus_find_device() in the sysfs
callbacks that are used to create and destroy devices based on
device-tree entries.

Fixes: 6bccf755ff ("[POWERPC] ibmebus: dynamic addition/removal of adapters, some code cleanup")
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
Johan Hovold 2016-11-01 16:26:00 +01:00 committed by Michael Ellerman
parent 9e4f51bdaf
commit fe0f316816
1 changed files with 6 additions and 2 deletions

View File

@ -262,6 +262,7 @@ static ssize_t ibmebus_store_probe(struct bus_type *bus,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct device_node *dn = NULL; struct device_node *dn = NULL;
struct device *dev;
char *path; char *path;
ssize_t rc = 0; ssize_t rc = 0;
@ -269,8 +270,10 @@ static ssize_t ibmebus_store_probe(struct bus_type *bus,
if (!path) if (!path)
return -ENOMEM; return -ENOMEM;
if (bus_find_device(&ibmebus_bus_type, NULL, path, dev = bus_find_device(&ibmebus_bus_type, NULL, path,
ibmebus_match_path)) { ibmebus_match_path);
if (dev) {
put_device(dev);
printk(KERN_WARNING "%s: %s has already been probed\n", printk(KERN_WARNING "%s: %s has already been probed\n",
__func__, path); __func__, path);
rc = -EEXIST; rc = -EEXIST;
@ -307,6 +310,7 @@ static ssize_t ibmebus_store_remove(struct bus_type *bus,
if ((dev = bus_find_device(&ibmebus_bus_type, NULL, path, if ((dev = bus_find_device(&ibmebus_bus_type, NULL, path,
ibmebus_match_path))) { ibmebus_match_path))) {
of_device_unregister(to_platform_device(dev)); of_device_unregister(to_platform_device(dev));
put_device(dev);
kfree(path); kfree(path);
return count; return count;