Once a driver has been matched and probe() returns with -EPROBE_DEFER the device is added to a deferred list and will be retried later. At this point __device_attach_driver() should stop trying other drivers as we have "matched" this driver and already scheduled another probe to happen later. Return the -EPROBE_DEFER from really_probe() instead of squashing it to zero. This is similar to the code at the top of the function which directly returns -EPROBE_DEFER. It is not really a bug as, AFAIK, we don't actually have cases where multiple drivers can bind. Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx> --- drivers/base/dd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/base/dd.c b/drivers/base/dd.c index ecd7cf848daff7..9d79a139290271 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -656,7 +656,7 @@ static int really_probe(struct device *dev, struct device_driver *drv) /* Driver requested deferred probing */ dev_dbg(dev, "Driver %s requests probe deferral\n", drv->name); driver_deferred_probe_add_trigger(dev, local_trigger_count); - break; + goto done; case -ENODEV: case -ENXIO: pr_debug("%s: probe of %s rejects match %d\n", -- 2.31.1