summaryrefslogtreecommitdiff
path: root/device.c
diff options
context:
space:
mode:
authorHans Dedecker <dedeckeh@gmail.com>2015-08-04 16:22:45 +0200
committerSteven Barth <steven@midlink.org>2015-08-25 08:23:40 +0200
commit5f0e4070402ff056584eac5afed490cd0a407697 (patch)
treeb8e2344f88591dc4ab4a56ec34fa53d7705788ff /device.c
parent0b32f960b8b073fdf983430723d675a31a110784 (diff)
downloadnetifd-5f0e4070402ff056584eac5afed490cd0a407697.tar.gz
netifd: Spawn device events when registering dependency in device_replace
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>
Diffstat (limited to 'device.c')
-rw-r--r--device.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/device.c b/device.c
index 1636611..66eb6d4 100644
--- 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--;