attribute_container_add_device() takes an explicit reference on the parent device, making it impossible to remove the parent by doing a simple put_device(). So we'd rather _not_ take a reference here as attribute_container will be handled explicitly by calls to attribute_container_remove_device()/_destroy_device() anyway. Signed-off-by: Hannes Reinecke <hare@xxxxxxx> --- drivers/base/attribute_container.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/base/attribute_container.c b/drivers/base/attribute_container.c index f57652d..6c7e633 100644 --- a/drivers/base/attribute_container.c +++ b/drivers/base/attribute_container.c @@ -114,10 +114,8 @@ static void attribute_container_release(struct device *classdev) { struct internal_container *ic = container_of(classdev, struct internal_container, classdev); - struct device *dev = classdev->parent; kfree(ic); - put_device(dev); } /** @@ -164,7 +162,11 @@ attribute_container_add_device(struct device *dev, ic->cont = cont; device_initialize(&ic->classdev); - ic->classdev.parent = get_device(dev); + /* + * Don't increase refcount here, device will be + * removed explicitly by a call to _destroy(). + */ + ic->classdev.parent = dev; ic->classdev.class = cont->class; cont->class->dev_release = attribute_container_release; strcpy(ic->classdev.bus_id, dev->bus_id); -- 1.5.2.4 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html