aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-08-18 02:37:16 -0400
committerDavid S. Miller <davem@davemloft.net>2008-08-18 02:37:16 -0400
commit96d203169d1d851ac1468f7d4459a09581be364c (patch)
tree779c9a942452b2bd0f5d7d42cdbc6fa9ca3b14c9 /net/core
parent13601cd8e44aab332cedff1d6dc10786ec890b7b (diff)
pkt_sched: Fix missed RCU unlock in dev_queue_xmit()
Noticed by Jarek Poplawski. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c10
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;