aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/virtio_net.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 54bf0912b737..d9ebac8a2d99 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -517,8 +517,7 @@ again:
517 /* Free up any pending old buffers before queueing new ones. */ 517 /* Free up any pending old buffers before queueing new ones. */
518 free_old_xmit_skbs(vi); 518 free_old_xmit_skbs(vi);
519 519
520 /* Put new one in send queue and do transmit */ 520 /* Try to transmit */
521 __skb_queue_head(&vi->send, skb);
522 capacity = xmit_skb(vi, skb); 521 capacity = xmit_skb(vi, skb);
523 522
524 /* This can happen with OOM and indirect buffers. */ 523 /* This can happen with OOM and indirect buffers. */
@@ -532,8 +531,17 @@ again:
532 } 531 }
533 return NETDEV_TX_BUSY; 532 return NETDEV_TX_BUSY;
534 } 533 }
535
536 vi->svq->vq_ops->kick(vi->svq); 534 vi->svq->vq_ops->kick(vi->svq);
535
536 /*
537 * Put new one in send queue. You'd expect we'd need this before
538 * xmit_skb calls add_buf(), since the callback can be triggered
539 * immediately after that. But since the callback just triggers
540 * another call back here, normal network xmit locking prevents the
541 * race.
542 */
543 __skb_queue_head(&vi->send, skb);
544
537 /* Don't wait up for transmitted skbs to be freed. */ 545 /* Don't wait up for transmitted skbs to be freed. */
538 skb_orphan(skb); 546 skb_orphan(skb);
539 nf_reset(skb); 547 nf_reset(skb);