]> err.no Git - linux-2.6/commitdiff
[SCSI] Fix transport class oops
authorJames Bottomley <James.Bottomley@steeleye.com>
Sun, 6 Nov 2005 17:47:08 +0000 (11:47 -0600)
committerJames Bottomley <jejb@mulgrave.(none)>
Sun, 6 Nov 2005 18:31:30 +0000 (12:31 -0600)
There's an oops that sometimes shows up with SCSI transport classes in
sysfs_hash_and_remove.  The problem is that now, because of the class to
device and vice versa symlinks, all classes have to be removed from
visibility *before* the device is removed from visibility.

The transport class trigger points violate this, so bring them back into
conformance.

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/scsi_sysfs.c

index 72a6550a056c9dc14ba33f2383a04b7fb9711d99..46349293de088603099405b48884fe505f665188 100644 (file)
@@ -691,16 +691,19 @@ int scsi_sysfs_add_sdev(struct scsi_device *sdev)
 
 void __scsi_remove_device(struct scsi_device *sdev)
 {
+       struct device *dev = &sdev->sdev_gendev;
+
        if (scsi_device_set_state(sdev, SDEV_CANCEL) != 0)
                return;
 
        class_device_unregister(&sdev->sdev_classdev);
-       device_del(&sdev->sdev_gendev);
+       transport_remove_device(dev);
+       device_del(dev);
        scsi_device_set_state(sdev, SDEV_DEL);
        if (sdev->host->hostt->slave_destroy)
                sdev->host->hostt->slave_destroy(sdev);
-       transport_unregister_device(&sdev->sdev_gendev);
-       put_device(&sdev->sdev_gendev);
+       transport_destroy_device(dev);
+       put_device(dev);
 }
 
 /**