On Tue, Jun 15, 2021 at 03:53:46PM +0200, Cornelia Huck wrote: > On Tue, Jun 15 2021, Christoph Hellwig <hch@xxxxxx> 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@xxxxxx> > > --- > > 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