]> git.pld-linux.org Git - packages/systemd.git/commitdiff
Revert network device renaming change causing breakage in existing configs
authorJan Rękorajski <baggins@pld-linux.org>
Mon, 20 Aug 2012 12:19:17 +0000 (14:19 +0200)
committerJan Rękorajski <baggins@pld-linux.org>
Mon, 20 Aug 2012 12:19:17 +0000 (14:19 +0200)
net-rename-revert.patch [new file with mode: 0644]
systemd.spec

diff --git a/net-rename-revert.patch b/net-rename-revert.patch
new file mode 100644 (file)
index 0000000..1c62171
--- /dev/null
@@ -0,0 +1,116 @@
+https://bugs.freedesktop.org/show_bug.cgi?id=53837
+
+Kay Sievers <kay@vrfy.org> changed:
+
+           What    |Removed                     |Added
+----------------------------------------------------------------------------
+             Status|NEW                         |RESOLVED
+         Resolution|                            |WONTFIX
+
+--- Comment #1 from Kay Sievers <kay@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@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;
+ }
index 0017d75d9e89f2f824f54d4ea3fe948a564db848..402f933ef80c20f9ca17cc0dc06531fa8f5dbee6 100644 (file)
@@ -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
This page took 0.058595 seconds and 4 git commands to generate.