[systemd-devel] [PATCH] Properly handle device aliases used as dependencies

Eelco Dolstra eelco.dolstra at logicblox.com
Wed Oct 10 13:43:10 PDT 2012

If a device unit has aliases defined in udev rules, and there are
other units that depend on that alias, as in


then systemd will fail the start the alias, and any dependent units
will time out.  See


This is because unit_add_name() in device_add_escaped_name() will
return EEXIST.

The solution taken here is to call device_update_unit() on the alias
name.  Thus if a unit with the alias name already exists, we reuse it;
otherwise a new unit is created.  Creating multiple units for a single
device is perhaps suboptimal, but it's consistent with the treatment
of udev symlinks in device_process_new_device().
 src/core/device.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/src/core/device.c b/src/core/device.c
index 8121dc9..be76caf 100644
--- a/src/core/device.c
+++ b/src/core/device.c
@@ -269,11 +269,8 @@ static int device_update_unit(Manager *m, struct udev_device *dev, const char *p
                                         log_warning("SYSTEMD_ALIAS for %s is not a path, ignoring: %s", sysfs, e);
                                 } else {
-                                        r = device_add_escaped_name(u, e);
+                                        device_update_unit(m, dev, e, false);
-                                        if (r < 0)
-                                                goto fail;

More information about the systemd-devel mailing list