• dingtianhong's avatar
    bonding: Fix RTNL: assertion failed at net/core/rtnetlink.c for ab arp monitor · b0929915
    dingtianhong authored
    Veaceslav has reported and fix this problem by commit f2ebd477
    
    
    (bonding: restructure locking of bond_ab_arp_probe()). According Jay's
    opinion, the current solution is not very well, because the notification
    is to indicate that the interface has actually changed state in a meaningful
    way, but these calls in the ab ARP monitor are internal settings of the flags
    to allow the ARP monitor to search for a slave to become active when there are
    no active slaves. The flag setting to active or backup is to permit the ARP
    monitor's response logic to do the right thing when deciding if the test
    slave (current_arp_slave) is up or not.
    
    So the best way to fix the problem is that we should not send a notification
    when the slave is in testing state, and check the state at the end of the
    monitor, if the slave's state recover, avoid to send pointless notification
    twice. And RTNL is really a big lock, hold it regardless the slave's state
    changed or not when the current_active_slave is null will loss performance
    (every 100ms), so we should hold it only when the slave's state changed and
    need to notify.
    
    I revert the old commit and add new modifications.
    
    Cc: Jay Vosburgh <fubar@us.ibm.com>
    Cc: Veaceslav Falico <vfalico@redhat.com>
    Cc: Andy Gospodarek <andy@greyhouse.net>
    Signed-off-by: default avatarDing Tianhong <dingtianhong@huawei.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b0929915