aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/core.c
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2009-07-30 15:27:18 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2009-09-15 12:50:46 -0400
commit2023c610dc54a4f4130b0494309a9bd668ca3df8 (patch)
tree2ffc4b19491df0f6131905d22bbb05c517a8c24c /drivers/base/core.c
parent18240904960a39e582ced8ba8ececb10b8c22dd3 (diff)
Driver core: add new device to bus's list before probing
This patch (as1271) affects when new devices get linked into their bus's list of devices. Currently this happens after probing, and it doesn't happen at all if probing fails. Clearly this is wrong, because at that point quite a few symbolic links have already been created in sysfs. We are committed to adding the device, so it should be linked into the bus's list regardless. In addition, this needs to happen before the uevent announcing the new device gets issued. Otherwise user programs might try to access the device before it has been added to the bus. To fix both these problems, the patch moves the call to klist_add_tail() forward from bus_attach_device() to bus_add_device(). Since bus_attach_device() now does nothing but probe for drivers, it has been renamed to bus_probe_device(). And lastly, the kerneldoc is updated. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> CC: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/base/core.c')
-rw-r--r--drivers/base/core.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 7ecb1938e590..c34774d0b9d3 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -945,7 +945,7 @@ int device_add(struct device *dev)
945 BUS_NOTIFY_ADD_DEVICE, dev); 945 BUS_NOTIFY_ADD_DEVICE, dev);
946 946
947 kobject_uevent(&dev->kobj, KOBJ_ADD); 947 kobject_uevent(&dev->kobj, KOBJ_ADD);
948 bus_attach_device(dev); 948 bus_probe_device(dev);
949 if (parent) 949 if (parent)
950 klist_add_tail(&dev->p->knode_parent, 950 klist_add_tail(&dev->p->knode_parent,
951 &parent->p->klist_children); 951 &parent->p->klist_children);