From: Eric Dumazet Date: Wed, 3 Oct 2012 23:18:39 +0000 (+0000) Subject: team: set qdisc_tx_busylock to avoid LOCKDEP splat X-Git-Tag: v3.7-rc1~109^2~5 X-Git-Url: http://pileus.org/git/?a=commitdiff_plain;h=b3c581d5d7130fc7f2eab9ab14c8de8882b42380;p=~andy%2Flinux team: set qdisc_tx_busylock to avoid LOCKDEP splat If a qdisc is installed on a team device, its possible to get a lockdep splat under stress, because nested dev_queue_xmit() can lock busylock a second time (on a different device, so its a false positive) Avoid this problem using a distinct lock_class_key for team devices. Signed-off-by: Eric Dumazet Cc: Jiri Pirko Acked-by: Jiri Pirko Signed-off-by: David S. Miller --- diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 5c7547c4f80..d44cca32758 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c @@ -1315,6 +1315,7 @@ static const struct team_option team_options[] = { static struct lock_class_key team_netdev_xmit_lock_key; static struct lock_class_key team_netdev_addr_lock_key; +static struct lock_class_key team_tx_busylock_key; static void team_set_lockdep_class_one(struct net_device *dev, struct netdev_queue *txq, @@ -1327,6 +1328,7 @@ static void team_set_lockdep_class(struct net_device *dev) { lockdep_set_class(&dev->addr_list_lock, &team_netdev_addr_lock_key); netdev_for_each_tx_queue(dev, team_set_lockdep_class_one, NULL); + dev->qdisc_tx_busylock = &team_tx_busylock_key; } static int team_init(struct net_device *dev)