On Mon, 2005-08-08 at 16:41 -0400, Alan Stern wrote: > > > Would you agree to a patch adding such a kref? > > > > Well, not really. The host template usually exists as a variable in the > > module, so its lifetime is tied to the lifetime of the module. Adding a > > kref wouldn't help because it will still be freed when the module is > > removed. If there's a case where the template is being freed > > prematurely because the module is being removed, then we have the module > > refcounting wrong somewhere. Have you run across such a case? > > I tried to provoke such a case, but failed. Evidently I've been barking > up the wrong tree. Normally the SCSI core doesn't call the LLD unless > some process has opened a device file for something on that host. This > will automatically do try_module_get on the LLD, making it impossible for > the LLD to be removed from memory. > > I'm not certain this reasoning is 100% reliable, though -- does it cover > _every_ case where the core calls the LLD? Maybe something like this > little patch would be a good idea: Yes, I was considering something similar, since all the last put of a driver does is send the completion that driver_unregister() should be waiting for > + struct device_driver *parent_driver; I don't think we need this. The underlying device has to be the parent of shost_gendev, so you can get the parent driver as shost_gendev.parent->driver > + if (shost->parent_driver) > + put_driver(shost->parent_driver); And just before this would be the place to do the final release of all the resources the HBA is holding. James - : 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