Commit 303c07db487be59ae9fda10600ea65ca11c21497

Authored by Eric Dumazet
Committed by David S. Miller
1 parent 7cb08d7f3a

ppp: set qdisc_tx_busylock to avoid LOCKDEP splat

If a qdisc is installed on a ppp 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 ppp
devices.

Reported-by: Yanko Kaneti <yaneti@declera.com>
Tested-by: Yanko Kaneti <yaneti@declera.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 8 additions and 0 deletions Side-by-side Diff

drivers/net/ppp/ppp_generic.c
... ... @@ -1058,7 +1058,15 @@
1058 1058 return stats64;
1059 1059 }
1060 1060  
  1061 +static struct lock_class_key ppp_tx_busylock;
  1062 +static int ppp_dev_init(struct net_device *dev)
  1063 +{
  1064 + dev->qdisc_tx_busylock = &ppp_tx_busylock;
  1065 + return 0;
  1066 +}
  1067 +
1061 1068 static const struct net_device_ops ppp_netdev_ops = {
  1069 + .ndo_init = ppp_dev_init,
1062 1070 .ndo_start_xmit = ppp_start_xmit,
1063 1071 .ndo_do_ioctl = ppp_net_ioctl,
1064 1072 .ndo_get_stats64 = ppp_get_stats64,