On 14 May 2004, James Bottomley wrote:

> The idea behind scsi_remove_host() was that it was going to be called
> from the module_exit() routine.  This means that the reference count on
> the LLD has already dropped to zero and it's safe for removal.
> 
> If you call scsi_remove_host() outside of the module_exit() code then
> what it does is remove all hosts from visibility (and makes it
> impossible to open or do anything with them), but it cannot revoke
> outstanding references (which may continue to use the device).  The
> mid-layer takes the devices through CANCEL and then DEL.  When
> scsi_remove_host() returns, you are guaranteed (barring any state model
> cockups) that the devices on the LLD with outstanding references are all
> in the DEL state.  It will also block the device from above (no commands
> will be sent down).  Any currently outstanding commands will be errored
> from the mid-layer; however, it will do nothing about outstanding
> commands in the LLD, you have to deal with them yourself.
> 
> The way this is supposed to work is that when you get a disconnection,
> you start refusing commands (and you also discard any active ones). 
> Then you call scsi_remove_host().  We discard all current commands
> 
> So, if the usb storage LLD isn't discarding the commands, then they may
> be active.

Yes, that would explain it.  We do arrange to abort the current command, 
but this is done before calling scsi_remove_host() when it should be done 
after.  And we don't wait for the kernel thread to become idle afterwards.

I'll work on a patch.  Testing it won't be easy, though; it's hard to 
prove that a race _isn't_ happening!

Alan Stern



-------------------------------------------------------
This SF.Net email is sponsored by: SourceForge.net Broadband
Sign-up now for SourceForge Broadband and get the fastest
6.0/768 connection for only $19.95/mo for the first 3 months!
http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to