aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/scsi_sysfs.c15
1 files changed, 2 insertions, 13 deletions
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
index 9117d0bf408e..8ead24c3453a 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -649,23 +649,12 @@ store_rescan_field (struct device *dev, struct device_attribute *attr,
649} 649}
650static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field); 650static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field);
651 651
652static void sdev_store_delete_callback(struct device *dev)
653{
654 scsi_remove_device(to_scsi_device(dev));
655}
656
657static ssize_t 652static ssize_t
658sdev_store_delete(struct device *dev, struct device_attribute *attr, 653sdev_store_delete(struct device *dev, struct device_attribute *attr,
659 const char *buf, size_t count) 654 const char *buf, size_t count)
660{ 655{
661 int rc; 656 if (device_remove_file_self(dev, attr))
662 657 scsi_remove_device(to_scsi_device(dev));
663 /* An attribute cannot be unregistered by one of its own methods,
664 * so we have to use this roundabout approach.
665 */
666 rc = device_schedule_callback(dev, sdev_store_delete_callback);
667 if (rc)
668 count = rc;
669 return count; 658 return count;
670}; 659};
671static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete); 660static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);