From: Nikolay Aleksandrov <razor@xxxxxxxxxxxxx> Date: Fri, 15 Jan 2016 19:03:54 +0100 > From: Nikolay Aleksandrov <nikolay@xxxxxxxxxxxxxxxxxxx> > > After promisc mode management was introduced a bridge device could do > dev_set_promiscuity from its ndo_change_rx_flags() callback which in > turn can be called after the bridge's addr_list_lock has been taken > (e.g. by dev_uc_add). This causes a false positive lockdep splat because > the port interfaces' addr_list_lock is taken when br_manage_promisc() > runs after the bridge's addr list lock was already taken. > To remove the false positive introduce a custom bridge addr_list_lock > class and set it on bridge init. > A simple way to reproduce this is with the following: > $ brctl addbr br0 > $ ip l add l br0 br0.100 type vlan id 100 > $ ip l set br0 up > $ ip l set br0.100 up > $ echo 1 > /sys/class/net/br0/bridge/vlan_filtering > $ brctl addif br0 eth0 > Splat: ... > CC: Vlad Yasevich <vyasevic@xxxxxxxxxx> > CC: Stephen Hemminger <stephen@xxxxxxxxxxxxxxxxxx> > CC: Bridge list <bridge@xxxxxxxxxxxxxxxxxxxxxxxxxx> > CC: Andy Gospodarek <gospo@xxxxxxxxxxxxxxxxxxx> > CC: Roopa Prabhu <roopa@xxxxxxxxxxxxxxxxxxx> > Fixes: 2796d0c648c9 ("bridge: Automatically manage port promiscuous mode.") > Reported-by: Andy Gospodarek <gospo@xxxxxxxxxxxxxxxxxxx> > Signed-off-by: Nikolay Aleksandrov <nikolay@xxxxxxxxxxxxxxxxxxx> Applied and queued up for -stable, thanks Nikolay.