netifd: Spawn device events when registering dependency in device_replace
authorHans Dedecker <dedeckeh@gmail.com>
Tue, 4 Aug 2015 14:22:45 +0000 (16:22 +0200)
committerSteven Barth <steven@midlink.org>
Tue, 25 Aug 2015 06:23:40 +0000 (08:23 +0200)
Spawn device events when adding dependency in device_replace so the dependency installer gets
the actual device status

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
device.c

index 1636611..66eb6d4 100644 (file)
--- a/device.c
+++ b/device.c
@@ -534,19 +534,11 @@ static int device_refcount(struct device *dev)
        return count;
 }
 
-void device_add_user(struct device_user *dep, struct device *dev)
+static void
+__device_add_user(struct device_user *dep, struct device *dev)
 {
        struct safe_list *head;
 
-       if (dep->dev == dev)
-               return;
-
-       if (dep->dev)
-               device_remove_user(dep);
-
-       if (!dev)
-               return;
-
        dep->dev = dev;
 
        if (dep->alias)
@@ -567,6 +559,20 @@ void device_add_user(struct device_user *dep, struct device *dev)
        }
 }
 
+void device_add_user(struct device_user *dep, struct device *dev)
+{
+       if (dep->dev == dev)
+               return;
+
+       if (dep->dev)
+               device_remove_user(dep);
+
+       if (!dev)
+               return;
+
+       __device_add_user(dep, dev);
+}
+
 void
 device_free(struct device *dev)
 {
@@ -710,8 +716,7 @@ device_replace(struct device *dev, struct device *odev)
        list_for_each_entry_safe(dep, tmp, &odev->users.list, list.list) {
                device_release(dep);
                safe_list_del(&dep->list);
-               safe_list_add(&dep->list, &dev->users);
-               dep->dev = dev;
+               __device_add_user(dep, dev);
        }
        __devlock--;