On Tue, 2005-11-08 at 11:24 -0500, goggin, edward wrote: > ! struct scsi_device *sdev = cmd->device; > ! struct request_queue *q = sdev->request_queue; > ! > ! // need to hold a reference on the device before we let go of the > cmd > ! if (scsi_device_get(sdev)) { > ! scsi_put_command(cmd); > ! return; // maybe sdev_state == SDEV_CANCEL, SDEV_DEL > ! } > > scsi_put_command(cmd); > scsi_run_queue(q); > + > + // ok to remove device now > + scsi_device_put(sdev);
This is the right idea, I think, but not necessarily the right fix. scsi_device_get() will fail if the device is going offline, but we would still need to run the queues. try this sequence instead: get_device(&sdev->sdev_gendev); scsi_put_command(cmd); scsi_run_queue(q); put_device(&sdev->sdev_gendev); James ------------------------------------------------------- SF.Net email is sponsored by: Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel