• Jarek Poplawski's avatar
    bonding: Fix lockdep warning after bond_vlan_rx_register() · a71fb881
    Jarek Poplawski authored
    Fix lockdep warning:
    [   52.991402] ======================================================
    [   52.991511] [ INFO: SOFTIRQ-safe -> SOFTIRQ-unsafe lock order detected ]
    [   52.991569] 2.6.36-04573-g4b60626-dirty #65
    [   52.991622] ------------------------------------------------------
    [   52.991696] ip/4842 [HC0[0]:SC0[4]:HE1:SE0] is trying to acquire:
    [   52.991758]  (&bond->lock){++++..}, at: [<efe4d300>] bond_set_multicast_list+0x60/0x2c0 [bonding]
    [   52.991966]
    [   52.991967] and this task is already holding:
    [   52.992008]  (&bonding_netdev_addr_lock_key){+.....}, at: [<c04e5530>] dev_mc_sync+0x50/0xa0
    [   52.992008] which would create a new lock dependency:
    [   52.992008]  (&bonding_netdev_addr_lock_key){+.....} -> (&bond->lock){++++..}
    [   52.992008]
    [   52.992008] but this new dependency connects a SOFTIRQ-irq-safe lock:
    [   52.992008]  (&(&mc->mca_lock)->rlock){+.-...}
    [   52.992008] ... which became SOFTIRQ-irq-safe at:
    [   52.992008]   [<c0272beb>] __lock_acquire+0x96b/0x1960
    [   52.992008]   [<c027415e>] lock_acquire+0x7e/0xf0
    [   52.992008]   [<c05f356d>] _raw_spin_lock_bh+0x3d/0x50
    [   52.992008]   [<c0584e40>] mld_ifc_timer_expire+0xf0/0x280
    [   52.992008]   [<c024cee6>] run_timer_softirq+0x146/0x310
    [   52.992008]   [<c024591d>] __do_softirq+0xad/0x1c0
    [   52.992008]
    [   52.992008] to a SOFTIRQ-irq-unsafe lock:
    [   52.992008]  (&bond->lock){++++..}
    [   52.992008] ... which became SOFTIRQ-irq-unsafe at:
    [   52.992008] ...  [<c0272c3b>] __lock_acquire+0x9bb/0x1960
    [   52.992008]   [<c027415e>] lock_acquire+0x7e/0xf0
    [   52.992008]   [<c05f36b8>] _raw_write_lock+0x38/0x50
    [   52.992008]   [<efe4cbe4>] bond_vlan_rx_register+0x24/0x70 [bonding]
    [   52.992008]   [<c0598010>] register_vlan_dev+0xc0/0x280
    [   52.992008]   [<c0599f3a>] vlan_newlink+0xaa/0xd0
    [   52.992008]   [<c04ed4b4>] rtnl_newlink+0x404/0x490
    [   52.992008]   [<c04ece35>] rtnetlink_rcv_msg+0x1e5/0x220
    [   52.992008]   [<c050424e>] netlink_rcv_skb+0x8e/0xb0
    [   52.992008]   [<c04ecbac>] rtnetlink_rcv+0x1c/0x30
    [   52.992008]   [<c0503bfb>] netlink_unicast+0x24b/0x290
    [   52.992008]   [<c0503e37>] netlink_sendmsg+0x1f7/0x310
    [   52.992008]   [<c04cd41c>] sock_sendmsg+0xac/0xe0
    [   52.992008]   [<c04ceb80>] sys_sendmsg+0x130/0x230
    [   52.992008]   [<c04cf04e>] sys_socketcall+0xde/0x280
    [   52.992008]   [<c0202d10>] sysenter_do_call+0x12/0x36
    [   52.992008]
    [   52.992008] other info that might help us debug this:
    ...
    [ Full info at netdev: Wed, 27 Oct 2010 12:24:30 +0200
      Subject: [BUG net-2.6 vlan/bonding] lockdep splats ]
    
    Use BH variant of write_lock(&bond->lock) (as elsewhere in bond_main)
    to prevent this dependency.
    
    Fixes commit f35188fa [v2.6.36]
    Reported-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Tested-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: default avatarJarek Poplawski <jarkao2@gmail.com>
    Acked-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Cc: Jay Vosburgh <fubar@us.ibm.com>
    a71fb881
bond_main.c 141 KB