On Fri, 2016-05-20 at 06:01 -0700, Eric Dumazet wrote: > Tricky, since sch_direct_xmit() releases the qdisc spinlock and grabs it > again, while owning the ' running seqcount' > > Needs more LOCKDEP tricks ;) >
That would be : @@ -137,10 +137,10 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q, HARD_TX_UNLOCK(dev, txq); } else { - spin_lock(root_lock); + spin_lock_nested(root_lock, SINGLE_DEPTH_NESTING); return qdisc_qlen(q); } - spin_lock(root_lock); + spin_lock_nested(root_lock, SINGLE_DEPTH_NESTING); if (dev_xmit_complete(ret)) { /* Driver sent out skb successfully or skb was consumed */