• Jarod Wilson's avatar
    bonding: set default miimon value for non-arp modes if not set · c1f897ce
    Jarod Wilson authored
    For some time now, if you load the bonding driver and configure bond
    parameters via sysfs using minimal config options, such as specifying
    nothing but the mode, relying on defaults for everything else, modes
    that cannot use arp monitoring (802.3ad, balance-tlb, balance-alb) all
    wind up with both arp_interval=0 (as it should be) and miimon=0, which
    means the miimon monitor thread never actually runs. This is particularly
    problematic for 802.3ad.
    
    For example, from an LNST recipe I've set up:
    
    $ modprobe bonding max_bonds=0"
    $ echo "+t_bond0" > /sys/class/net/bonding_masters"
    $ ip link set t_bond0 down"
    $ echo "802.3ad" > /sys/class/net/t_bond0/bonding/mode"
    $ ip link set ens1f1 down"
    $ echo "+ens1f1" > /sys/class/net/t_bond0/bonding/slaves"
    $ ip link set ens1f0 down"
    $ echo "+ens1f0" > /sys/class/net/t_bond0/bonding/slaves"
    $ ethtool -i t_bond0"
    $ ip link set ens1f1 up"
    $ ip link set ens1f0 up"
    $ ip link set t_bond0 up"
    $ ip addr add 192.168.9.1/24 dev t_bond0"
    $ ip addr add 2002::1/64 dev t_bond0"
    
    This bond comes up okay, but things look slightly suspect in
    /proc/net/bonding/t_bond0 output:
    
    $ grep -i mii /proc/net/bonding/t_bond0
    MII Status: up
    MII Polling Interval (ms): 0
    MII Status: up
    MII Status: up
    
    Now, pull a cable on one of the ports in the bond, then reconnect it, and
    you'll see:
    
    Slave Interface: ens1f0
    MII Status: down
    Speed: 1000 Mbps
    Duplex: full
    
    I believe this became a major issue as of commit 4d2c0cda, which for
    802.3ad bonds, sets slave->link = BOND_LINK_DOWN, with a comment about
    relying on link monitoring via miimon to set it correctly, but since the
    miimon work queue never runs, the link just stays marked down.
    
    If we simply tweak bond_option_mode_set() slightly, we can check for the
    non-arp modes having no miimon value set, and insert BOND_DEFAULT_MIIMON,
    which gets things back in full working order. This problem exists as far
    back as 4.14, and might be worth fixing in all stable trees since, though
    the work-around is to simply specify an miimon value yourself.
    Reported-by: default avatarBob Ball <ball@umich.edu>
    Signed-off-by: default avatarJarod Wilson <jarod@redhat.com>
    Acked-by: default avatarMahesh Bandewar <maheshb@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c1f897ce
bond_options.c 41.7 KB