}
 
 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);
 }