From 7580a800949fcbd1f4622dbfa450ee2ae4dc1165 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 26 May 2008 17:42:42 +1000 Subject: [PATCH] --- yaml --- r: 97647 b: refs/heads/master c: 7eb2e25112bf920bb0a4d1cca445f3d96874c25f h: refs/heads/master i: 97645: 178e360096bbe4d66e6c7e69c7b8715228592476 97643: 08414629e3dd76787336293581b4abd61334ceea 97639: 3025f38977048a6e12fcb84061c30f7e147fe23c 97631: d455177f15b2757e40d4dbb8cb75a508dda89da0 v: v3 --- [refs] | 2 +- trunk/drivers/net/virtio_net.c | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index f959d7894467..27b709e1f1d9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d399cf8c04c595d738d82d02ae2755b902a51571 +refs/heads/master: 7eb2e25112bf920bb0a4d1cca445f3d96874c25f diff --git a/trunk/drivers/net/virtio_net.c b/trunk/drivers/net/virtio_net.c index fe7cdf2a2a23..d50f4fe352b3 100644 --- a/trunk/drivers/net/virtio_net.c +++ b/trunk/drivers/net/virtio_net.c @@ -287,21 +287,25 @@ static int start_xmit(struct sk_buff *skb, struct net_device *dev) free_old_xmit_skbs(vi); /* If we has a buffer left over from last time, send it now. */ - if (vi->last_xmit_skb) { + if (unlikely(vi->last_xmit_skb)) { if (xmit_skb(vi, vi->last_xmit_skb) != 0) { /* Drop this skb: we only queue one. */ vi->dev->stats.tx_dropped++; kfree_skb(skb); + skb = NULL; goto stop_queue; } vi->last_xmit_skb = NULL; } /* Put new one in send queue and do transmit */ - __skb_queue_head(&vi->send, skb); - if (xmit_skb(vi, skb) != 0) { - vi->last_xmit_skb = skb; - goto stop_queue; + if (likely(skb)) { + __skb_queue_head(&vi->send, skb); + if (xmit_skb(vi, skb) != 0) { + vi->last_xmit_skb = skb; + skb = NULL; + goto stop_queue; + } } done: vi->svq->vq_ops->kick(vi->svq);