diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/virtio_net.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index c28d7cb2035b..06d5c43bb207 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
@@ -335,16 +335,11 @@ again: | |||
335 | free_old_xmit_skbs(vi); | 335 | free_old_xmit_skbs(vi); |
336 | 336 | ||
337 | /* If we has a buffer left over from last time, send it now. */ | 337 | /* If we has a buffer left over from last time, send it now. */ |
338 | if (unlikely(vi->last_xmit_skb)) { | 338 | if (unlikely(vi->last_xmit_skb) && |
339 | if (xmit_skb(vi, vi->last_xmit_skb) != 0) { | 339 | xmit_skb(vi, vi->last_xmit_skb) != 0) |
340 | /* Drop this skb: we only queue one. */ | 340 | goto stop_queue; |
341 | vi->dev->stats.tx_dropped++; | 341 | |
342 | kfree_skb(skb); | 342 | vi->last_xmit_skb = NULL; |
343 | skb = NULL; | ||
344 | goto stop_queue; | ||
345 | } | ||
346 | vi->last_xmit_skb = NULL; | ||
347 | } | ||
348 | 343 | ||
349 | /* Put new one in send queue and do transmit */ | 344 | /* Put new one in send queue and do transmit */ |
350 | if (likely(skb)) { | 345 | if (likely(skb)) { |
@@ -370,6 +365,11 @@ stop_queue: | |||
370 | netif_start_queue(dev); | 365 | netif_start_queue(dev); |
371 | goto again; | 366 | goto again; |
372 | } | 367 | } |
368 | if (skb) { | ||
369 | /* Drop this skb: we only queue one. */ | ||
370 | vi->dev->stats.tx_dropped++; | ||
371 | kfree_skb(skb); | ||
372 | } | ||
373 | goto done; | 373 | goto done; |
374 | } | 374 | } |
375 | 375 | ||