aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2014-01-10 08:57:29 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-01-10 17:13:59 -0500
commitde1dee7820c44b1a5765265ed7ca8ee44f2367c1 (patch)
tree99ed8a8857de0b9f9c1062f389ac5c517e640470
parent6716d289c437ad42dee455d241b29b71a816fbff (diff)
scsi: use device_remove_file_self() instead of device_schedule_callback()
driver-core now supports synchrnous self-deletion of attributes and the asynchrnous removal mechanism is scheduled for removal. Use it instead of device_schedule_callback(). This makes "delete" behave synchronously. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: "James E.J. Bottomley" <JBottomley@parallels.com> Cc: linux-scsi@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-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 8ff62c26a41c..33e619921358 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -635,23 +635,12 @@ store_rescan_field (struct device *dev, struct device_attribute *attr,
635} 635}
636static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field); 636static DEVICE_ATTR(rescan, S_IWUSR, NULL, store_rescan_field);
637 637
638static void sdev_store_delete_callback(struct device *dev)
639{
640 scsi_remove_device(to_scsi_device(dev));
641}
642
643static ssize_t 638static ssize_t
644sdev_store_delete(struct device *dev, struct device_attribute *attr, 639sdev_store_delete(struct device *dev, struct device_attribute *attr,
645 const char *buf, size_t count) 640 const char *buf, size_t count)
646{ 641{
647 int rc; 642 if (device_remove_file_self(dev, attr))
648 643 scsi_remove_device(to_scsi_device(dev));
649 /* An attribute cannot be unregistered by one of its own methods,
650 * so we have to use this roundabout approach.
651 */
652 rc = device_schedule_callback(dev, sdev_store_delete_callback);
653 if (rc)
654 count = rc;
655 return count; 644 return count;
656}; 645};
657static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete); 646static DEVICE_ATTR(delete, S_IWUSR, NULL, sdev_store_delete);