diff options
Diffstat (limited to 'drivers/scsi/scsi_sysfs.c')
| -rw-r--r-- | drivers/scsi/scsi_sysfs.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index 9ad41168d26d..b333389f248f 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c | |||
| @@ -1030,11 +1030,20 @@ int scsi_sysfs_add_sdev(struct scsi_device *sdev) | |||
| 1030 | "failed to add device: %d\n", error); | 1030 | "failed to add device: %d\n", error); |
| 1031 | return error; | 1031 | return error; |
| 1032 | } | 1032 | } |
| 1033 | |||
| 1034 | error = scsi_dh_add_device(sdev); | ||
| 1035 | if (error) { | ||
| 1036 | sdev_printk(KERN_INFO, sdev, | ||
| 1037 | "failed to add device handler: %d\n", error); | ||
| 1038 | return error; | ||
| 1039 | } | ||
| 1040 | |||
| 1033 | device_enable_async_suspend(&sdev->sdev_dev); | 1041 | device_enable_async_suspend(&sdev->sdev_dev); |
| 1034 | error = device_add(&sdev->sdev_dev); | 1042 | error = device_add(&sdev->sdev_dev); |
| 1035 | if (error) { | 1043 | if (error) { |
| 1036 | sdev_printk(KERN_INFO, sdev, | 1044 | sdev_printk(KERN_INFO, sdev, |
| 1037 | "failed to add class device: %d\n", error); | 1045 | "failed to add class device: %d\n", error); |
| 1046 | scsi_dh_remove_device(sdev); | ||
| 1038 | device_del(&sdev->sdev_gendev); | 1047 | device_del(&sdev->sdev_gendev); |
| 1039 | return error; | 1048 | return error; |
| 1040 | } | 1049 | } |
| @@ -1074,6 +1083,7 @@ void __scsi_remove_device(struct scsi_device *sdev) | |||
| 1074 | bsg_unregister_queue(sdev->request_queue); | 1083 | bsg_unregister_queue(sdev->request_queue); |
| 1075 | device_unregister(&sdev->sdev_dev); | 1084 | device_unregister(&sdev->sdev_dev); |
| 1076 | transport_remove_device(dev); | 1085 | transport_remove_device(dev); |
| 1086 | scsi_dh_remove_device(sdev); | ||
| 1077 | device_del(dev); | 1087 | device_del(dev); |
| 1078 | } else | 1088 | } else |
| 1079 | put_device(&sdev->sdev_dev); | 1089 | put_device(&sdev->sdev_dev); |
