diff options
author | Mahesh Bandewar <maheshb@google.com> | 2017-03-27 21:37:33 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-03-28 07:11:49 +0300 |
commit | de77ecd4ef02ca783f7762e04e92b3d0964be66b (patch) | |
tree | 9c60b36e20036731d3a425a02cf2fd44b45b2e26 /usr | |
parent | f307668bfcb7e83b6f62bda6a703e09613a00bd0 (diff) | |
download | linux-de77ecd4ef02ca783f7762e04e92b3d0964be66b.tar.xz |
bonding: improve link-status update in mii-monitoring
The primary issue is that mii-inspect phase updates link-state and
expects changes to be committed during the mii-commit phase. After
the inspect phase if it fails to acquire rtnl-mutex, the commit
phase (bond_mii_commit) doesn't get to run. This partially updated
state stays and makes the internal-state inconsistent.
e.g. setup bond0 => slaves: eth1, eth2
eth1 goes DOWN -> UP
mii_monitor()
mii-inspect()
bond_set_slave_link_state(eth1, UP, DontNotify)
rtnl_trylock() <- fails!
Next mii-monitor round
eth1: No change
mii_monitor()
mii-inspect()
eth1->link == current-status (ethtool_ops->get_link)
no-change-detected
End result:
eth1:
Link = BOND_LINK_UP
Speed = 0xfffff [SpeedUnknown]
Duplex = 0xff [DuplexUnknown]
This doesn't always happen but for some unlucky machines in a large set
of machines it creates problems.
The fix for this is to avoid making changes during inspect phase and
postpone them until acquiring the rtnl-mutex / invoking commit phase.
Signed-off-by: Mahesh Bandewar <maheshb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'usr')
0 files changed, 0 insertions, 0 deletions