diff options
author | Aaron Conole <aconole@redhat.com> | 2020-05-15 16:36:18 -0400 |
---|---|---|
committer | Ilya Maximets <i.maximets@ovn.org> | 2020-05-16 13:15:50 +0200 |
commit | 7a076a53716394742d0ae44652451501ae17335d (patch) | |
tree | fd44b946f3163705b73639d435d939e4ad76acb3 | |
parent | fe175ac17352ceb2dbc9958112b4b1bc114d82f0 (diff) | |
download | openvswitch-7a076a53716394742d0ae44652451501ae17335d.tar.gz |
netdev-linux: Update LAG in all cases.
In some cases, when processing a netlink change event, it's possible for
an alternate part of OvS (like the IPv6 endpoint processing) to hold an
active netdev interface. This creates a race-condition, where sometimes
the OvS change processing will take the normal path. This doesn't work
because the netdev device object won't actually be enslaved to the
ovs-system (for instance, a linux bond) and ingress qdisc entries will
be missing.
To address this, we update the LAG information in ALL cases where
LAG information could come in.
Fixes: d22f8927c3c9 ("netdev-linux: monitor and offload LAG slaves to TC")
Cc: Marcelo Leitner <mleitner@redhat.com>
Cc: John Hurley <john.hurley@netronome.com>
Acked-by: Roi Dayan <roid@mellanox.com>
Signed-off-by: Aaron Conole <aconole@redhat.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
-rw-r--r-- | lib/netdev-linux.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index b52071e92..6269c24ac 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -655,10 +655,6 @@ netdev_linux_update_lag(struct rtnetlink_change *change) { struct linux_lag_slave *lag; - if (!rtnetlink_type_is_rtnlgrp_link(change->nlmsg_type)) { - return; - } - if (change->slave && netdev_linux_kind_is_lag(change->slave)) { lag = shash_find_data(&lag_shash, change->ifname); @@ -756,8 +752,11 @@ netdev_linux_run(const struct netdev_class *netdev_class OVS_UNUSED) netdev_linux_update(netdev, nsid, &change); ovs_mutex_unlock(&netdev->mutex); } - else if (!netdev_ && change.ifname) { - /* Netdev is not present in OvS but its master could be. */ + + if (change.ifname && + rtnetlink_type_is_rtnlgrp_link(change.nlmsg_type)) { + + /* Need to try updating the LAG information. */ ovs_mutex_lock(&lag_mutex); netdev_linux_update_lag(&change); ovs_mutex_unlock(&lag_mutex); |