pkt_sched: Prevent livelock in TX queue running.
authorDavid S. Miller <davem@davemloft.net>
Tue, 19 Aug 2008 11:00:36 +0000 (04:00 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 19 Aug 2008 11:00:36 +0000 (04:00 -0700)
commit195648bbc5ae0848e82f771ecf4cd7497054c212
tree644bc8685cab5f83225558888a4398cd0c93c919
parentd2805395aadc105d7228511eb0f42d9eea912003
pkt_sched: Prevent livelock in TX queue running.

If dev_deactivate() is trying to quiesce the queue, it
is theoretically possible for another cpu to livelock
trying to process that queue.  This happens because
dev_deactivate() grabs the queue spinlock as it checks
the queue state, whereas net_tx_action() does a trylock
and reschedules the qdisc if it hits the lock.

This breaks the livelock by adding a check on
__QDISC_STATE_DEACTIVATED to net_tx_action() when
the trylock fails.

Based upon feedback from Herbert Xu and Jarek Poplawski.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c