diff options
author | David S. Miller <davem@davemloft.net> | 2008-08-18 02:37:16 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-08-18 02:37:16 -0400 |
commit | 96d203169d1d851ac1468f7d4459a09581be364c (patch) | |
tree | 779c9a942452b2bd0f5d7d42cdbc6fa9ca3b14c9 | |
parent | 13601cd8e44aab332cedff1d6dc10786ec890b7b (diff) |
pkt_sched: Fix missed RCU unlock in dev_queue_xmit()
Noticed by Jarek Poplawski.
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/core/dev.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 819f0175bdc9..8d133802372b 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1805,14 +1805,12 @@ gso: | |||
1805 | spin_lock(root_lock); | 1805 | spin_lock(root_lock); |
1806 | 1806 | ||
1807 | if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, &q->state))) { | 1807 | if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, &q->state))) { |
1808 | spin_unlock(root_lock); | 1808 | kfree_skb(skb); |
1809 | rc = NET_XMIT_DROP; | 1809 | rc = NET_XMIT_DROP; |
1810 | goto out_kfree_skb; | 1810 | } else { |
1811 | rc = qdisc_enqueue_root(skb, q); | ||
1812 | qdisc_run(q); | ||
1811 | } | 1813 | } |
1812 | |||
1813 | rc = qdisc_enqueue_root(skb, q); | ||
1814 | qdisc_run(q); | ||
1815 | |||
1816 | spin_unlock(root_lock); | 1814 | spin_unlock(root_lock); |
1817 | 1815 | ||
1818 | goto out; | 1816 | goto out; |