summaryrefslogtreecommitdiff
path: root/sys-apps/openrc/files/openrc-0.8.3-ccwgroup.patch
diff options
context:
space:
mode:
Diffstat (limited to 'sys-apps/openrc/files/openrc-0.8.3-ccwgroup.patch')
-rw-r--r--sys-apps/openrc/files/openrc-0.8.3-ccwgroup.patch57
1 files changed, 57 insertions, 0 deletions
diff --git a/sys-apps/openrc/files/openrc-0.8.3-ccwgroup.patch b/sys-apps/openrc/files/openrc-0.8.3-ccwgroup.patch
new file mode 100644
index 00000000..14ecd5f8
--- /dev/null
+++ b/sys-apps/openrc/files/openrc-0.8.3-ccwgroup.patch
@@ -0,0 +1,57 @@
+From c427d3c1fec89f6a9281dccdc123bad73af80804 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Tue, 28 Jun 2011 00:02:11 -0400
+Subject: [PATCH] net: ccwgroup: smooth up/down process
+
+We need to bring the link up ourselves after we've properly configured
+the device. The common code tries to bring the link up itself, but it
+does so before things are configured, and so it ends up failing.
+
+When shutting down, we need to wait for the kernel to finish destroying
+the interface. Otherwise, when doing a restart, openrc is quick enough
+to tell the kernel to destroy things, but then start trying to bring it
+back up before the kernel has finished.
+
+X-Gentoo-Bug: 367467
+X-Gentoo-Bug-URL: http://bugs.gentoo.org/367467
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+---
+ net/ccwgroup.sh | 14 ++++++++++++--
+ 1 files changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/net/ccwgroup.sh b/net/ccwgroup.sh
+index 248b159..60cd25f 100644
+--- a/net/ccwgroup.sh
++++ b/net/ccwgroup.sh
+@@ -58,6 +58,11 @@ ccwgroup_pre_start()
+ echo "${val}" > /sys/devices/${ccw_type}/${first}/${var}
+ done
+ eend $?
++
++ # Now that we've properly configured the device, we can run
++ # bring the interface up. Common code tried to do this already,
++ # but it failed because we didn't setup sysfs yet.
++ _up
+ }
+
+ ccwgroup_pre_stop()
+@@ -88,9 +93,14 @@ ccwgroup_post_stop()
+ local device="$(service_get_value ccwgroup_device)"
+ [ -z "${device}" ] && return 0
+ local ccw_type="$(service_get_value ccwgroup_type)"
++ local path="/sys/devices/${ccw_type}/${device}"
+
+ einfo "Disabling ccwgroup/${ccw_type} on ${IFACE}"
+- echo "0" >/sys/devices/${ccw_type}/"${device}"/online
+- echo "1" >/sys/devices/${ccw_type}/"${device}"/ungroup
++ if echo "0" >"${path}"/online &&
++ echo "1" >"${path}"/ungroup ; then
++ # The device doesn't disappear right away which breaks
++ # restart, or a quick start up, so wait around.
++ while [ -e "${path}" ] ; do :; done
++ fi
+ eend $?
+ }
+--
+1.7.5.3
+