driver core: Move driver_sysfs_remove() after driver_sysfs_add()
authorLu Baolu <baolu.lu@linux.intel.com>
Fri, 31 Dec 2021 03:39:00 +0000 (11:39 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 6 Jan 2022 14:47:41 +0000 (15:47 +0100)
The driver_sysfs_remove() should be called after driver_sysfs_add() in
really_probe(). The out-of-order driver_sysfs_remove() tries to remove
some nonexistent nodes under the device and driver sysfs nodes. This is
allowed, hence this change doesn't fix any problem, just a cleanup.

Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Link: https://lore.kernel.org/r/20211231033901.2168664-2-baolu.lu@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/base/dd.c

index 68ea1f9..f6fac01 100644 (file)
@@ -577,14 +577,14 @@ re_probe:
        if (dev->bus->dma_configure) {
                ret = dev->bus->dma_configure(dev);
                if (ret)
-                       goto probe_failed;
+                       goto sysfs_failed;
        }
 
        ret = driver_sysfs_add(dev);
        if (ret) {
                pr_err("%s: driver_sysfs_add(%s) failed\n",
                       __func__, dev_name(dev));
-               goto probe_failed;
+               goto sysfs_failed;
        }
 
        if (dev->pm_domain && dev->pm_domain->activate) {
@@ -657,6 +657,8 @@ dev_groups_failed:
        else if (drv->remove)
                drv->remove(dev);
 probe_failed:
+       driver_sysfs_remove(dev);
+sysfs_failed:
        if (dev->bus)
                blocking_notifier_call_chain(&dev->bus->p->bus_notifier,
                                             BUS_NOTIFY_DRIVER_NOT_BOUND, dev);
@@ -666,7 +668,6 @@ pinctrl_bind_failed:
        arch_teardown_dma_ops(dev);
        kfree(dev->dma_range_map);
        dev->dma_range_map = NULL;
-       driver_sysfs_remove(dev);
        dev->driver = NULL;
        dev_set_drvdata(dev, NULL);
        if (dev->pm_domain && dev->pm_domain->dismiss)