public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 7/8] Fix refcounting for attribute_container
@ 2008-03-18 13:32 Hannes Reinecke
  2008-03-23 14:59 ` James Bottomley
  0 siblings, 1 reply; 2+ messages in thread
From: Hannes Reinecke @ 2008-03-18 13:32 UTC (permalink / raw)
  To: James Bottomley; +Cc: linux-scsi


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@suse.de>
---
 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


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH 7/8] Fix refcounting for attribute_container
  2008-03-18 13:32 [PATCH 7/8] Fix refcounting for attribute_container Hannes Reinecke
@ 2008-03-23 14:59 ` James Bottomley
  0 siblings, 0 replies; 2+ messages in thread
From: James Bottomley @ 2008-03-23 14:59 UTC (permalink / raw)
  To: Hannes Reinecke; +Cc: linux-scsi

On Tue, 2008-03-18 at 14:32 +0100, Hannes Reinecke wrote:
> 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.

I really don't think this is right.  The attribute container does hold a
reference to the device, so we should make it explicit.  You could argue
that in the new parent indicates class device model there's *already* a
reference, so this one is superfluous, but it does help to make the
relationship explicit.  Regardless, because we have an implicit
reference, your comment for the patch can't work (whether we explicitly
take the ref or not, you can't expect the device to be unrefereced by
the attribute container).

James



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-03-23 14:59 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-18 13:32 [PATCH 7/8] Fix refcounting for attribute_container Hannes Reinecke
2008-03-23 14:59 ` James Bottomley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox