diff options
author | Thomas Graf <tgraf@noironetworks.com> | 2015-04-22 09:49:43 +0200 |
---|---|---|
committer | Thomas Graf <tgraf@noironetworks.com> | 2015-04-22 09:49:55 +0200 |
commit | a6df8ea0be5f68b644ed0bfcc68fed14d8fe5b96 (patch) | |
tree | ce90c09eab48d8d4e37b3279723a94101ccc2b9c /utilities | |
parent | aa6fb0772f481b0f1a96c35c521a2eb0c4d5a179 (diff) | |
download | openvswitch-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-x | utilities/ovs-ctl.in | 24 |
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 |