This patch (as1342) moves the call of transport_destroy_device() from __scsi_remove_device() to scsi_device_dev_release_usercontext() where it logically belongs. In theory the slave_destroy() call belongs there too, but at that point we don't know whether the corresponding slave_alloc() call succeeded. Signed-off-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> --- Index: usb-2.6/drivers/scsi/scsi_sysfs.c =================================================================== --- usb-2.6.orig/drivers/scsi/scsi_sysfs.c +++ usb-2.6/drivers/scsi/scsi_sysfs.c @@ -302,6 +302,8 @@ static void scsi_device_dev_release_user parent = sdev->sdev_gendev.parent; starget = to_scsi_target(parent); + transport_destroy_device(&sdev->sdev_gendev); + spin_lock_irqsave(sdev->host->host_lock, flags); starget->reap_ref++; list_del(&sdev->siblings); @@ -962,7 +964,6 @@ void __scsi_remove_device(struct scsi_de scsi_device_set_state(sdev, SDEV_DEL); if (sdev->host->hostt->slave_destroy) sdev->host->hostt->slave_destroy(sdev); - transport_destroy_device(dev); put_device(dev); } Index: usb-2.6/drivers/scsi/scsi_scan.c =================================================================== --- usb-2.6.orig/drivers/scsi/scsi_scan.c +++ usb-2.6/drivers/scsi/scsi_scan.c @@ -326,7 +326,6 @@ static struct scsi_device *scsi_alloc_sd out_device_destroy: scsi_device_set_state(sdev, SDEV_DEL); - transport_destroy_device(&sdev->sdev_gendev); put_device(&sdev->sdev_dev); put_device(&sdev->sdev_gendev); out: -- To unsubscribe from this list: 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