On Wed, 31 Oct 2007, James Bottomley wrote: > On Wed, 2007-10-31 at 07:32 -0700, Greg KH wrote: > > Hm, I seem to have missed the part in this thread where someone said > > that it was valid to have a parent reference a child device. That's > > just wrong and needs to be fixed. Is that in the scsi layer somewhere? > > The block layer? It sure isn't in the driver core... > > This is the piece I'm still not clear on. It's something to do with the > gendisk. I'd have to look in block, but I believe the queue takes a ref > to the gendisk. > > The scsi_device has a ref to the queue and the scsi_disk (in sd) has a > ref to both the scsi_device and the gendisk. That means, until sd is > unbound and the scsi_disk released, there's an implied unbreakable > reference chain. > > at least, I think that's what the problem is. No, you haven't got it right. Parent Child Grandchild ------ ----- ---------- scsi_device gendisk request_queue The odd part is that the scsi_device holds a reference to the queue. That creates a reference loop: scsi_device holds ref to request_queue (done explicitly) request_queue holds ref to gendisk (implicit, parent-child) gendisk holds ref to scsi_device (implicit, parent-child) The scsi_disk adds confusion to the picture but it doesn't make things any worse than they already are. Alan Stern - 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