Re: [TECH TOPIC] Driver probe fails and register succeeds

Guenter Roeck
2022-06-23T23:24:13Z

On 6/23/22 16:05, Shuah Khan wrote:
> I have been debugging a driver probe failure and noticed that driver gets
> registered even when driver probe fails. This is not a new behavior. The
> code in question is the same since 2005.
>
> dmesg will say that a driver probe failed with error code and then the very
> next message from interface core that says driver is registered successfully.
> It will create sysfs interfaces.
>
> The probe failure is propagated from the drive probe routine all the way up to
> __driver_attach(). __driver_attach() ignores the error and and returns success.
>
>         __device_driver_lock(dev, dev->parent);
>         driver_probe_device(drv, dev);
>         __device_driver_unlock(dev, dev->parent);
>
>         return 0;
>
> Interface driver register goes on to create sysfs entries as if driver probe
> worked. It handles errors from driver_register() and unwinds the register
> properly, however in this case it doesn't know about the failure.
>
> At this point the driver is defunct with sysfs interfaces. User has to run
> rmmod to get rid of the defunct driver.
>
> Simply returning the error from __driver_attach() didn't work as expected.
> I figured it would fail since not all interface drivers can handle errors
> from driver probe routines.
>
> I propose that we discuss the scenario to find possible solutions to avoid
> defunct drivers.
>

Doesn't this confuse device probe from loading the driver ? If multiple devices
are instantiated using a single driver, I would not want the driver to unload
because one of the devices it supports failed to probe.

Guenter