|
@@ -404,21 +404,24 @@ ccwgroup_driver_register (struct ccwgroup_driver *cdriver)
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
-__ccwgroup_driver_unregister_device(struct device *dev, void *data)
|
|
|
+__ccwgroup_match_all(struct device *dev, void *data)
|
|
|
{
|
|
|
- __ccwgroup_remove_symlinks(to_ccwgroupdev(dev));
|
|
|
- device_unregister(dev);
|
|
|
- put_device(dev);
|
|
|
- return 0;
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
void
|
|
|
ccwgroup_driver_unregister (struct ccwgroup_driver *cdriver)
|
|
|
{
|
|
|
+ struct device *dev;
|
|
|
+
|
|
|
/* We don't want ccwgroup devices to live longer than their driver. */
|
|
|
get_driver(&cdriver->driver);
|
|
|
- driver_for_each_device(&cdriver->driver, NULL, NULL,
|
|
|
- __ccwgroup_driver_unregister_device);
|
|
|
+ while ((dev = driver_find_device(&cdriver->driver, NULL, NULL,
|
|
|
+ __ccwgroup_match_all))) {
|
|
|
+ __ccwgroup_remove_symlinks(to_ccwgroupdev(dev));
|
|
|
+ device_unregister(dev);
|
|
|
+ put_device(dev);
|
|
|
+ }
|
|
|
put_driver(&cdriver->driver);
|
|
|
driver_unregister(&cdriver->driver);
|
|
|
}
|