• Nikolay Aleksandrov's avatar
    bonding: correctly handle bonding type change on enslave failure · 7d5cd2ce
    Nikolay Aleksandrov authored
    If the bond is enslaving a device with different type it will be setup
    by it, but if after being setup the enslave fails the bond doesn't
    switch back its type and also keeps pointers to foreign structures that can
    be long gone. Thus revert back any type changes if the enslave failed and
    the bond had to change its type.
    Example:
     Before patch:
    $ echo lo > bond0/bonding/slaves
    -bash: echo: write error: Cannot assign requested address
    $ ip l sh bond0
    20: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN
    mode DEFAULT group default
        link/loopback 16:54:78:34:bd:41 brd 00:00:00:00:00:00
    $ echo +eth1 > bond0/bonding/slaves
    $ ip l sh bond0
    20: bond0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode
    DEFAULT group default qlen 1000
        link/ether 52:54:00:3f:47:69 brd ff:ff:ff:ff:ff:ff
    (notice the MASTER flag is gone)
    
     After patch:
    $ echo lo > bond0/bonding/slaves
    -bash: echo: write error: Cannot assign requested address
    $ ip l sh bond0
    21: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN
    mode DEFAULT group default qlen 1000
        link/ether 6e:66:94:f6:07:fc brd ff:ff:ff:ff:ff:ff
    $ echo +eth1 > bond0/bonding/slaves
    $ ip l sh bond0
    21: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN
    mode DEFAULT group default qlen 1000
        link/ether 52:54:00:3f:47:69 brd ff:ff:ff:ff:ff:ff
    Signed-off-by: default avatarNikolay Aleksandrov <nikolay@cumulusnetworks.com>
    Fixes: e36b9d16 ("bonding: clean muticast addresses when device changes type")
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7d5cd2ce
bond_main.c 131 KB