On Tue, Jun 15, 2021 at 03:53:46PM +0200, Cornelia Huck wrote:
On Tue, Jun 15 2021, Christoph Hellwig hch@lst.de wrote:
really_probe tries to special case errors from ->probe, but due to all other initialization added to the function over time now a lot of internal errors hit that code path as well. Untangle that by adding a new probe_err local variable and apply the special casing only to that.
Signed-off-by: Christoph Hellwig hch@lst.de
drivers/base/dd.c | 72 +++++++++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 30 deletions(-)
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 7477d3322b3a..fd83817240e6 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -513,12 +513,44 @@ static ssize_t state_synced_show(struct device *dev, } static DEVICE_ATTR_RO(state_synced);
+static int call_driver_probe(struct device *dev, struct device_driver *drv) +{
- int ret = 0;
- if (dev->bus->probe)
ret = dev->bus->probe(dev);
- else if (drv->probe)
ret = drv->probe(dev);
- switch (ret) {
- case 0:
break;
- case -EPROBE_DEFER:
/* Driver requested deferred probing */
dev_dbg(dev, "Driver %s requests probe deferral\n", drv->name);
break;
- case -ENODEV:
- case -ENXIO:
pr_debug("%s: probe of %s rejects match %d\n",
drv->name, dev_name(dev), ret);
break;
- default:
/* driver matched but the probe failed */
pr_warn("%s: probe of %s failed with error %d\n",
drv->name, dev_name(dev), ret);
Convert these two pr_* to dev_* when touching the code anyway?
It can wait, it's just moving code around for now.
thanks,
greg k-h