]> git.pld-linux.org Git - packages/systemd.git/blame_incremental - net-rename-revert.patch
since 240 /var/lib/systemd/timesync needs to be directory instead of symlink
[packages/systemd.git] / net-rename-revert.patch
... / ...
CommitLineData
1From: Michael Biebl <biebl@debian.org>
2Date: Thu, 18 Jul 2013 01:04:07 +0200
3Subject: Revert "udev: network device renaming - immediately give up if the
4 target name isn't available"
5
6This reverts commit 97595710b77aa162ca5e20da57d0a1ed7355eaad.
7
8We need to keep supporting systems with 75-persistent-net-generator.rules
9generated names for a while after switching to net.ifnames. Re-apply this old
10hack to make the renaming less likely to fail.
11---
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
14@@ -698,6 +698,8 @@
15 sd_device *dev = event->dev;
16 const char *oldname;
17 int ifindex, r;
18+ char name[IFNAMSIZ];
19+ int loop;
20
21 if (!event->name)
22 return 0; /* No new name is requested. */
23@@ -719,22 +720,66 @@
24 return log_device_error_errno(dev, r, "Failed to get ifindex: %m");
25
26 r = rtnl_set_link_name(&event->rtnl, ifindex, event->name);
27+ if (r >= 0) {
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");
30+ if (r < 0)
31+ log_device_warning_errno(dev, r, "Failed to add 'ID_RENAMING' property: %m");
32+
33+ r = device_rename(dev, event->name);
34+ if (r < 0)
35+ log_device_warning_errno(dev, r, "Failed to update properties with new name '%s': %m", event->name);
36+
37+ log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, oldname, event->name);
38+ return 1;
39+ }
40+
41+ /* keep trying if the destination interface name already exists */
42+ if (r != -EEXIST)
43+ goto out;
44+
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);
48 if (r < 0)
49- return log_device_error_errno(dev, r, "Failed to rename network interface %i from '%s' to '%s': %m",
50- ifindex, oldname, event->name);
51+ goto out;
52+
53+ /* log temporary name */
54+ log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, oldname, event->name);
55
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");
58- if (r < 0)
59- 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);
62+ loop = 90 * 20;
63+ while (loop--) {
64+ const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
65+
66+ nanosleep(&duration, NULL);
67+
68+ r = rtnl_set_link_name(&event->rtnl, ifindex, name);
69+ if (r >= 0) {
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");
72+ if (r < 0)
73+ log_device_warning_errno(dev, r, "Failed to add 'ID_RENAMING' property: %m");
74+
75+ r = device_rename(dev, event->name);
76+ if (r < 0)
77+ log_device_warning_errno(dev, r, "Failed to update properties with new name '%s': %m", event->name);
78+
79+ log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, oldname, event->name);
80+ return 1;
81+ }
82+ if (r != -EEXIST)
83+ goto out;
84+ }
85
86- r = device_rename(dev, event->name);
87+out:
88 if (r < 0)
89- 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);
92+ return r;
93
94- log_device_debug(dev, "Network interface %i is renamed from '%s' to '%s'", ifindex, oldname, event->name);
95
96- return 1;
97 }
98
99 static int update_devnode(UdevEvent *event) {
This page took 0.046583 seconds and 4 git commands to generate.