ChangeSet 1.781.21.1, 2002/10/15 00:10:26-07:00, david-b@pacbell.net [PATCH] found_match return value incorrect. > I've seen several cases where 'usbtest' would look at the device > and say "no thanks", but then the "right" driver wouldn't ever > bind to the device. This patch seems to fix it. I think Linus' tree needs it, or something like it. (Since the probe routine returns zero on success, there was confusion inside the driver model code where it assumed that zero meant failure.) diff -Nru a/drivers/base/core.c b/drivers/base/core.c --- a/drivers/base/core.c Fri Oct 18 14:44:04 2002 +++ b/drivers/base/core.c Fri Oct 18 14:44:04 2002 @@ -54,7 +54,7 @@ */ static int found_match(struct device * dev, struct device_driver * drv) { - int error = 0; + int error; if (!(error = probe(dev,get_driver(drv)))) { pr_debug("bound device '%s' to driver '%s'\n", @@ -64,7 +64,7 @@ put_driver(drv); dev->driver = NULL; } - return error; + return error == 0; } /** @@ -75,7 +75,9 @@ * This function is used as a callback to bus_for_each_drv. * It calls the bus's match callback to check if the driver supports * the device. If so, it calls the found_match() function above to - * take care of all the details. + * try taking care of all the details. + * + * Returns zero (to continue the scan) if the driver didn't attach. */ static int do_device_attach(struct device_driver * drv, void * data) {