summaryrefslogtreecommitdiff
path: root/utilities
diff options
context:
space:
mode:
authorThomas Graf <tgraf@noironetworks.com>2015-04-22 09:49:43 +0200
committerThomas Graf <tgraf@noironetworks.com>2015-04-22 09:49:55 +0200
commita6df8ea0be5f68b644ed0bfcc68fed14d8fe5b96 (patch)
treece90c09eab48d8d4e37b3279723a94101ccc2b9c /utilities
parentaa6fb0772f481b0f1a96c35c521a2eb0c4d5a179 (diff)
downloadopenvswitch-a6df8ea0be5f68b644ed0bfcc68fed14d8fe5b96.tar.gz
ovs-ctl: Unload & reload vport modules on force-reload-kmod
We manually rmmod the loaded vports as using modprobe -r only works if the modules are available through modules.dep We do not treat failures to load vports as a fatal error in case the vport module has been renamed. Bringing the bridge back up is considered more important. The error is still reported though. Reported-by: Pravin Shelar <pshelar@nicira.com> Signed-off-by: Thomas Graf <tgraf@noironetworks.com> Acked-by: Flavio Leitner <fbl@sysclose.org>
Diffstat (limited to 'utilities')
-rwxr-xr-xutilities/ovs-ctl.in24
1 files changed, 22 insertions, 2 deletions
diff --git a/utilities/ovs-ctl.in b/utilities/ovs-ctl.in
index 6d2e9388a..97716e9ff 100755
--- a/utilities/ovs-ctl.in
+++ b/utilities/ovs-ctl.in
@@ -30,6 +30,19 @@ done
## start ##
## ----- ##
+# Keep track of removed vports so we can reload them if needed
+removed_vports=""
+
+insert_mods () {
+ # Try loading openvswitch again.
+ action "Inserting openvswitch module" modprobe openvswitch
+
+ for vport in $removed_vports; do
+ # Don't treat failures to load vports as fatal error
+ action "Inserting $vport module" modprobe $vport || true
+ done
+}
+
insert_mod_if_required () {
# If this kernel has no module support, expect we're done.
if test ! -e /proc/modules
@@ -43,7 +56,7 @@ insert_mod_if_required () {
return 0
# Load openvswitch. If that's successful then we're done.
- action "Inserting openvswitch module" modprobe openvswitch && return 0
+ insert_mods && return 0
# If the bridge module is loaded, then that might be blocking
# openvswitch. Try to unload it, if there are no bridges.
@@ -56,7 +69,7 @@ insert_mod_if_required () {
action "removing bridge module" rmmod bridge || return 1
# Try loading openvswitch again.
- action "Inserting openvswitch module" modprobe openvswitch
+ insert_mods
}
ovs_vsctl () {
@@ -388,6 +401,13 @@ force_reload_kmod () {
action "Removing datapath: $dp" ovs-dpctl del-dp "$dp"
done
+ for vport in `awk '/^vport_/ { print $1 }' /proc/modules`; do
+ action "Removing $vport module" rmmod $vport
+ if ! grep -q $vport /proc/modules; then
+ removed_vports="$removed_vports $vport"
+ fi
+ done
+
# try both old and new names in case this is post upgrade
if test -e /sys/module/openvswitch_mod; then
action "Removing openvswitch module" rmmod openvswitch_mod