|
@@ -715,6 +715,7 @@ static int attr_add(struct device *dev, struct device_attribute *attr)
|
|
int scsi_sysfs_add_sdev(struct scsi_device *sdev)
|
|
int scsi_sysfs_add_sdev(struct scsi_device *sdev)
|
|
{
|
|
{
|
|
int error, i;
|
|
int error, i;
|
|
|
|
+ struct request_queue *rq = sdev->request_queue;
|
|
|
|
|
|
if ((error = scsi_device_set_state(sdev, SDEV_RUNNING)) != 0)
|
|
if ((error = scsi_device_set_state(sdev, SDEV_RUNNING)) != 0)
|
|
return error;
|
|
return error;
|
|
@@ -734,6 +735,17 @@ int scsi_sysfs_add_sdev(struct scsi_device *sdev)
|
|
/* take a reference for the sdev_classdev; this is
|
|
/* take a reference for the sdev_classdev; this is
|
|
* released by the sdev_class .release */
|
|
* released by the sdev_class .release */
|
|
get_device(&sdev->sdev_gendev);
|
|
get_device(&sdev->sdev_gendev);
|
|
|
|
+
|
|
|
|
+ error = bsg_register_queue(rq, sdev->sdev_gendev.bus_id);
|
|
|
|
+
|
|
|
|
+ if (error)
|
|
|
|
+ sdev_printk(KERN_INFO, sdev,
|
|
|
|
+ "Failed to register bsg queue, errno=%d\n", error);
|
|
|
|
+
|
|
|
|
+ /* we're treating error on bsg register as non-fatal, so pretend
|
|
|
|
+ * nothing went wrong */
|
|
|
|
+ error = 0;
|
|
|
|
+
|
|
if (sdev->host->hostt->sdev_attrs) {
|
|
if (sdev->host->hostt->sdev_attrs) {
|
|
for (i = 0; sdev->host->hostt->sdev_attrs[i]; i++) {
|
|
for (i = 0; sdev->host->hostt->sdev_attrs[i]; i++) {
|
|
error = attr_add(&sdev->sdev_gendev,
|
|
error = attr_add(&sdev->sdev_gendev,
|
|
@@ -780,6 +792,7 @@ void __scsi_remove_device(struct scsi_device *sdev)
|
|
if (scsi_device_set_state(sdev, SDEV_CANCEL) != 0)
|
|
if (scsi_device_set_state(sdev, SDEV_CANCEL) != 0)
|
|
return;
|
|
return;
|
|
|
|
|
|
|
|
+ bsg_unregister_queue(sdev->request_queue);
|
|
class_device_unregister(&sdev->sdev_classdev);
|
|
class_device_unregister(&sdev->sdev_classdev);
|
|
transport_remove_device(dev);
|
|
transport_remove_device(dev);
|
|
device_del(dev);
|
|
device_del(dev);
|