[PATCH] Use device_for_each_child() to unregister devices in scsi_remove_target().
Signed-off-by: Patrick Mochel <mochel@digitalimplant.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> Index: gregkh-2.6/drivers/scsi/scsi_sysfs.c ===================================================================
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
0293a50940
commit
20b1e67423
@@ -669,6 +669,13 @@ void __scsi_remove_target(struct scsi_target *starget)
|
|||||||
scsi_target_reap(starget);
|
scsi_target_reap(starget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __remove_child (struct device * dev, void * data)
|
||||||
|
{
|
||||||
|
if (scsi_is_target_device(dev))
|
||||||
|
__scsi_remove_target(to_scsi_target(dev));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* scsi_remove_target - try to remove a target and all its devices
|
* scsi_remove_target - try to remove a target and all its devices
|
||||||
* @dev: generic starget or parent of generic stargets to be removed
|
* @dev: generic starget or parent of generic stargets to be removed
|
||||||
@@ -679,7 +686,7 @@ void __scsi_remove_target(struct scsi_target *starget)
|
|||||||
*/
|
*/
|
||||||
void scsi_remove_target(struct device *dev)
|
void scsi_remove_target(struct device *dev)
|
||||||
{
|
{
|
||||||
struct device *rdev, *idev, *next;
|
struct device *rdev;
|
||||||
|
|
||||||
if (scsi_is_target_device(dev)) {
|
if (scsi_is_target_device(dev)) {
|
||||||
__scsi_remove_target(to_scsi_target(dev));
|
__scsi_remove_target(to_scsi_target(dev));
|
||||||
@@ -687,10 +694,7 @@ void scsi_remove_target(struct device *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
rdev = get_device(dev);
|
rdev = get_device(dev);
|
||||||
list_for_each_entry_safe(idev, next, &dev->children, node) {
|
device_for_each_child(dev, NULL, __remove_child);
|
||||||
if (scsi_is_target_device(idev))
|
|
||||||
__scsi_remove_target(to_scsi_target(idev));
|
|
||||||
}
|
|
||||||
put_device(rdev);
|
put_device(rdev);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(scsi_remove_target);
|
EXPORT_SYMBOL(scsi_remove_target);
|
||||||
|
Reference in New Issue
Block a user