powerpc/ibmebus: Fix device reference leaks in sysfs interface
commit fe0f3168169f7c34c29b0cf0c489f126a7f29643 upstream.
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
488e7b2c5b
commit
ef6eadbf7b
1 changed files with 6 additions and 2 deletions
|
@ -266,6 +266,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;
|
||||||
|
|
||||||
|
@ -273,8 +274,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;
|
||||||
|
@ -311,6 +314,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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue