1 From: Michael Biebl <biebl@debian.org>
2 Date: Thu, 18 Jul 2013 01:04:07 +0200
3 Subject: Revert "udev: network device renaming - immediately give up if the
4 target name isn't available"
6 This reverts commit 97595710b77aa162ca5e20da57d0a1ed7355eaad.
8 We need to keep supporting systems with 75-persistent-net-generator.rules
9 generated names for a while after switching to net.ifnames. Re-apply this old
10 hack to make the renaming less likely to fail.
12 --- systemd-242/src/udev/udev-event.c.orig 2019-04-11 18:28:36.000000000 +0200
13 +++ systemd-242/src/udev/udev-event.c 2019-04-13 14:19:13.346990771 +0200
15 sd_device *dev = event->dev;
18 + char name[IFNAMSIZ];
22 return 0; /* No new name is requested. */
24 return log_device_error_errno(dev, r, "Failed to get ifindex: %m");
26 r = rtnl_set_link_name(&event->rtnl, ifindex, event->name);
28 + /* Set ID_RENAMING boolean property here, and drop it in the corresponding move uevent later. */
29 + r = device_add_property(dev, "ID_RENAMING", "1");
31 + log_device_warning_errno(dev, r, "Failed to add 'ID_RENAMING' property: %m");
33 + r = device_rename(dev, event->name);
35 + log_device_warning_errno(dev, r, "Failed to update properties with new name '%s': %m", event->name);
37 + log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, oldname, event->name);
41 + /* keep trying if the destination interface name already exists */
45 + /* free our own name, another process may wait for us */
46 + snprintf(name, IFNAMSIZ, "rename%u", ifindex);
47 + r = rtnl_set_link_name(&event->rtnl, ifindex, name);
49 - return log_device_error_errno(dev, r, "Failed to rename network interface %i from '%s' to '%s': %m",
50 - ifindex, oldname, event->name);
53 + /* log temporary name */
54 + log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, oldname, event->name);
56 - /* Set ID_RENAMING boolean property here, and drop it in the corresponding move uevent later. */
57 - r = device_add_property(dev, "ID_RENAMING", "1");
59 - return log_device_warning_errno(dev, r, "Failed to add 'ID_RENAMING' property: %m");
60 + /* wait a maximum of 90 seconds for our target to become available */
61 + strscpy(name, IFNAMSIZ, event->name);
64 + const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
66 + nanosleep(&duration, NULL);
68 + r = rtnl_set_link_name(&event->rtnl, ifindex, name);
70 + /* Set ID_RENAMING boolean property here, and drop it in the corresponding move uevent later. */
71 + r = device_add_property(dev, "ID_RENAMING", "1");
73 + log_device_warning_errno(dev, r, "Failed to add 'ID_RENAMING' property: %m");
75 + r = device_rename(dev, event->name);
77 + log_device_warning_errno(dev, r, "Failed to update properties with new name '%s': %m", event->name);
79 + log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, oldname, event->name);
86 - r = device_rename(dev, event->name);
89 - return log_device_warning_errno(dev, r, "Failed to update properties with new name '%s': %m", event->name);
90 + return log_device_error_errno(dev, r, "Failed to rename network interface %i from '%s' to '%s': %m",
91 + ifindex, oldname, event->name);
94 - log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, oldname, event->name);
99 static int update_devnode(UdevEvent *event) {