Messages in this thread | | | Subject | RE: oops with USB Storage on 2.6.14 | From | James Bottomley <> | Date | Tue, 08 Nov 2005 12:01:45 -0500 |
| |
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
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |