On Tue, Apr 11, 2006 at 11:14:07PM +0900, Tejun Heo wrote: > This function is called during sdev removal by SCSI midlayer. For > user-initiated removals, this is the only indication we get from SCSI > midlayer that the sdev is going away. In such cases, schedule ATA > detach and invoke EH. For libata-initiated removal, nothing needs to > be done. > User initiated warm unplugging has a race condition. If user initiated warm unplug kicks int after ata_scsi_remove_dev() fetched dev->sdev but before it actually removes the device, the sdev will go away while ata_scsi_remove_dev() is still trying to remove it. This can be solved by doing scsi_device_get() in ata_scsi_remove_dev() after fetching dev->sdev. I'll post the fixed version in the next round. The #upstream change breaks all EH/NCQ/hotplug patchsets anyway. My repo currently contains the following changes from the posted version. * above mentioned sdev removal race fix * scsi_eh_schedule_* are updated to reflect ->eh_strategy_handler relocation * duplicate .can_queue initialization removed from sil24-NCQ patch removed (why doesn't compiler complian about this?) * updated to use ata_shost_to_port() I think above changes shouldn't hinder reviewing process too much. Though, if you want me to post the updated version, just let me know. Thanks. -- tejun - : send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html