summaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-08-17 23:37:16 -0700
committerDavid S. Miller <davem@davemloft.net>2008-08-17 23:37:16 -0700
commit96d203169d1d851ac1468f7d4459a09581be364c (patch)
tree779c9a942452b2bd0f5d7d42cdbc6fa9ca3b14c9 /net/core
parent13601cd8e44aab332cedff1d6dc10786ec890b7b (diff)
downloadkernel-crypto-96d203169d1d851ac1468f7d4459a09581be364c.tar.gz
kernel-crypto-96d203169d1d851ac1468f7d4459a09581be364c.tar.xz
kernel-crypto-96d203169d1d851ac1468f7d4459a09581be364c.zip
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 819f0175bdc..8d133802372 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1805,14 +1805,12 @@ gso:
spin_lock(root_lock);
if (unlikely(test_bit(__QDISC_STATE_DEACTIVATED, &q->state))) {
- spin_unlock(root_lock);
+ kfree_skb(skb);
rc = NET_XMIT_DROP;
- goto out_kfree_skb;
+ } else {
+ rc = qdisc_enqueue_root(skb, q);
+ qdisc_run(q);
}
-
- rc = qdisc_enqueue_root(skb, q);
- qdisc_run(q);
-
spin_unlock(root_lock);
goto out;