All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kay Sievers <kay.sievers@vrfy.org>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Hannes Reinecke <hare@suse.de>, Greg KH <greg@kroah.com>,
	Kernel development list <linux-kernel@vger.kernel.org>
Subject: Re: Re: BUG in: Driver core: convert block from raw kobjects to core devices (fwd)
Date: Wed, 07 Nov 2007 20:36:22 +0100	[thread overview]
Message-ID: <1194464182.2303.44.camel@lov.site> (raw)
In-Reply-To: <Pine.LNX.4.44L0.0711071051560.4444-100000@iolanthe.rowland.org>

On Wed, 2007-11-07 at 10:54 -0500, Alan Stern wrote:
> On Wed, 7 Nov 2007, Hannes Reinecke wrote:
> 
> > Alan Stern wrote:
> > > 
> > > Thus we have a cycle:
> > > 
> > > 	1&2: request_queue isn't released before scsi_device;
> > > 
> > > 	3: scsi_device isn't released before gendisk;
> > > 
> > > 	4: gendisk isn't released before request_queue.
> > > 
> > > The dependency in 1&2 is hard-coded into the SCSI core.  If I 
> > > understand correctly, the core really does need the request_queue to 
> > > hang around as long as the scsi_device is still present.  According to 
> > > James Bottomley, any block device driver should be expected to have a 
> > > similar requirement.
> > > 
> > This is actually true, but as other block device drivers create the
> > LUN (or the equivalent thereof), the request queue, and the block device
> > at the same time or under control of the driver itself they don't have
> > this problem.
> > It's only due to the decoupling of the block driver from the underlying
> > device (ie sd driver and scsi_device) when this problem arises.
> 
> I don't understand your reasoning.  If the same parent-child
> relationships exist then it doesn't matter who creates the data
> stuctures.  All that matters is that the block device's reference to
> the request_queue isn't dropped until the device is released.
> 
> > > But the dependencies in 3 and 4 are unnecessary.  They are artifacts,
> > > caused by the fact that a kobject doesn't drop its reference to its
> > > parent until it is released.  If instead the reference to the parent
> > > were dropped when the kobject was removed then 3 and 4 wouldn't apply.
> > > 
> > And should be okay as the device isn't accessible from userland
> > anyway after doing a device_del(). And the implication is that it's
> > going to be remove soon entirely. So we're just moving the timing
> > of the eventual call to the ->release() function; the events will
> > be triggered by device_del() and won't be changed.
> > And if some device actually requires a reference to the parent
> > during ->release() it can as well acquire it manually and shouldn't
> > rely on the core logic to do that automatically.
> 
> My thinking exactly.

It would remove another implicit "magic" from the core, which is good.

Otherwise we will need to introduce a kobject_orphan(), to disassociate
an object from its parent, which would be kind of weird, just to break
out of the default core logic.

I would expect this patch to have an effect only at the pretty complex
refcounting users of the driver core, which are SCSI and USB, and I
expect the people involved are good prepared now, to fix such possible
bugs, should they show up. :)

Kay


  reply	other threads:[~2007-11-07 19:36 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-29 15:18 BUG in: Driver core: convert block from raw kobjects to core devices (fwd) Alan Stern
2007-10-29 15:35 ` James Bottomley
2007-10-29 16:38   ` Alan Stern
2007-10-29 16:45     ` James Bottomley
2007-10-29 17:04       ` Alan Stern
2007-10-29 18:47   ` Alan Stern
2007-10-29 19:13     ` Kay Sievers
2007-10-31  4:25       ` Greg KH
2007-10-31 10:46         ` Kay Sievers
2007-10-31 14:32           ` Greg KH
2007-10-31 15:15             ` James Bottomley
2007-10-31 15:40               ` Kay Sievers
2007-10-31 15:47                 ` James Bottomley
2007-10-31 16:04                   ` Alan Stern
2007-10-31 16:13                     ` James Bottomley
2007-10-31 16:24                       ` Kay Sievers
2007-10-31 16:31                         ` James Bottomley
2007-10-31 16:42                           ` Kay Sievers
2007-10-31 16:46                             ` James Bottomley
2007-10-31 17:32                               ` Kay Sievers
2007-10-31 18:36                               ` Alan Stern
2007-11-05 21:49                             ` Alan Stern
2007-11-05 21:59                               ` Greg KH
2007-11-06 19:49                                 ` Alan Stern
2007-11-07 12:21                                   ` Hannes Reinecke
2007-11-07 15:54                                     ` Alan Stern
2007-11-07 19:36                                       ` Kay Sievers [this message]
2007-11-07 20:00                                         ` Alan Stern
2007-10-31 16:44                           ` Alan Stern
2007-10-31 17:07                             ` James Bottomley
2007-10-31 18:38                               ` Alan Stern
2007-10-31 15:58               ` Alan Stern
2007-10-31 16:11                 ` James Bottomley
2007-10-31  4:24     ` Greg KH
2007-10-31 15:51       ` Alan Stern

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1194464182.2303.44.camel@lov.site \
    --to=kay.sievers@vrfy.org \
    --cc=greg@kroah.com \
    --cc=hare@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.