[packages/systemd] Revert network device renaming change causing breakage in existing configs
baggins
baggins at pld-linux.org
Mon Aug 20 14:31:03 CEST 2012
commit 5112024c1ca5af6ce98628a95a6e3961aefeaa0e
Author: Jan Rękorajski <baggins at pld-linux.org>
Date: Mon Aug 20 14:19:17 2012 +0200
Revert network device renaming change causing breakage in existing configs
net-rename-revert.patch | 116 ++++++++++++++++++++++++++++++++++++++++++++++++
systemd.spec | 2 +
2 files changed, 118 insertions(+)
---
diff --git a/systemd.spec b/systemd.spec
index 0017d75..402f933 100644
--- a/systemd.spec
+++ b/systemd.spec
@@ -79,6 +79,7 @@ Patch6: udev-so.patch
Patch7: udev-uClibc.patch
Patch8: udev-ploop-rules.patch
Patch9: udevadm-in-sbin.patch
+Patch10: net-rename-revert.patch
# hack set to allow static udev build
Patch100: static-udev.patch
URL: http://www.freedesktop.org/wiki/Software/systemd
@@ -564,6 +565,7 @@ initrd.
%endif
%patch8 -p1
%patch9 -p1
+%patch10 -p1
cp -p %{SOURCE2} src/systemd_booted.c
%build
diff --git a/net-rename-revert.patch b/net-rename-revert.patch
new file mode 100644
index 0000000..1c62171
--- /dev/null
+++ b/net-rename-revert.patch
@@ -0,0 +1,116 @@
+https://bugs.freedesktop.org/show_bug.cgi?id=53837
+
+Kay Sievers <kay at vrfy.org> changed:
+
+ What |Removed |Added
+----------------------------------------------------------------------------
+ Status|NEW |RESOLVED
+ Resolution| |WONTFIX
+
+--- Comment #1 from Kay Sievers <kay at vrfy.org> 2012-08-20 12:12:56 UTC ---
+Please use biosdevname or name the devices other than ethX.
+
+We do not try to race against the kernel anymore, and therefore do not
+support swapping names around in the kernel namespace.
+
+In short: Devices can no longer be renamed to ethX.
+
+============================================================================
+
+Revert 97595710b77aa162ca5e20da57d0a1ed7355eaad
+
+From: Kay Sievers <kay at vrfy.org>
+Date: Thu, 05 Jul 2012 15:40:50 +0000
+Subject: udev: network device renaming - immediately give up if the target name isn't available
+
+diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
+index 2b9fdf6..aff1487 100644
+--- a/src/udev/udev-event.c
++++ b/src/udev/udev-event.c
+@@ -745,11 +745,32 @@ out:
+ return err;
+ }
+
++static void rename_netif_kernel_log(struct ifreq ifr)
++{
++ int klog;
++ FILE *f;
++
++ klog = open("/dev/kmsg", O_WRONLY|O_CLOEXEC);
++ if (klog < 0)
++ return;
++
++ f = fdopen(klog, "w");
++ if (f == NULL) {
++ close(klog);
++ return;
++ }
++
++ fprintf(f, "<30>udevd[%u]: renamed network interface %s to %s\n",
++ getpid(), ifr.ifr_name, ifr.ifr_newname);
++ fclose(f);
++}
++
+ static int rename_netif(struct udev_event *event)
+ {
+ struct udev_device *dev = event->dev;
+ int sk;
+ struct ifreq ifr;
++ int loop;
+ int err;
+
+ log_debug("changing net interface name from '%s' to '%s'\n",
+@@ -766,12 +787,49 @@ static int rename_netif(struct udev_event *event)
+ util_strscpy(ifr.ifr_name, IFNAMSIZ, udev_device_get_sysname(dev));
+ util_strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
+ err = ioctl(sk, SIOCSIFNAME, &ifr);
+- if (err >= 0) {
+- print_kmsg("renamed network interface %s to %s\n", ifr.ifr_name, ifr.ifr_newname);
+- } else {
++ if (err == 0) {
++ rename_netif_kernel_log(ifr);
++ goto out;
++ }
++
++ /* keep trying if the destination interface name already exists */
++ err = -errno;
++ if (err != -EEXIST)
++ goto out;
++
++ /* free our own name, another process may wait for us */
++ snprintf(ifr.ifr_newname, IFNAMSIZ, "rename%u", udev_device_get_ifindex(dev));
++ err = ioctl(sk, SIOCSIFNAME, &ifr);
++ if (err < 0) {
+ err = -errno;
+- log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
++ goto out;
++ }
++
++ /* log temporary name */
++ rename_netif_kernel_log(ifr);
++
++ /* wait a maximum of 90 seconds for our target to become available */
++ util_strscpy(ifr.ifr_name, IFNAMSIZ, ifr.ifr_newname);
++ util_strscpy(ifr.ifr_newname, IFNAMSIZ, event->name);
++ loop = 90 * 20;
++ while (loop--) {
++ const struct timespec duration = { 0, 1000 * 1000 * 1000 / 20 };
++
++ nanosleep(&duration, NULL);
++
++ err = ioctl(sk, SIOCSIFNAME, &ifr);
++ if (err == 0) {
++ rename_netif_kernel_log(ifr);
++ break;
++ }
++ err = -errno;
++ if (err != -EEXIST)
++ break;
+ }
++
++out:
++ if (err < 0)
++ log_error("error changing net interface name %s to %s: %m\n", ifr.ifr_name, ifr.ifr_newname);
+ close(sk);
+ return err;
+ }
More information about the pld-cvs-commit
mailing list