>From 404fc549f858cd0cf3a84865442fe85fedb920de Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Sat, 8 Mar 2008 10:30:58 +0100 Subject: [PATCH] Fix refcounting for attribute_container attribute_container_add_device() took an explicit reference on the parent device, making it impossible to remove the parent by doing a simple put. 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 --- 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.3.2