diff options
Diffstat (limited to 'drivers/net/virtio_net.c')
-rw-r--r-- | drivers/net/virtio_net.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 916241d16c67..d208f8604981 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
@@ -426,10 +426,10 @@ static void receive_buf(struct receive_queue *rq, void *buf, unsigned int len) | |||
426 | if (unlikely(len < sizeof(struct virtio_net_hdr) + ETH_HLEN)) { | 426 | if (unlikely(len < sizeof(struct virtio_net_hdr) + ETH_HLEN)) { |
427 | pr_debug("%s: short packet %i\n", dev->name, len); | 427 | pr_debug("%s: short packet %i\n", dev->name, len); |
428 | dev->stats.rx_length_errors++; | 428 | dev->stats.rx_length_errors++; |
429 | if (vi->big_packets) | 429 | if (vi->mergeable_rx_bufs) |
430 | give_pages(rq, buf); | ||
431 | else if (vi->mergeable_rx_bufs) | ||
432 | put_page(virt_to_head_page(buf)); | 430 | put_page(virt_to_head_page(buf)); |
431 | else if (vi->big_packets) | ||
432 | give_pages(rq, buf); | ||
433 | else | 433 | else |
434 | dev_kfree_skb(buf); | 434 | dev_kfree_skb(buf); |
435 | return; | 435 | return; |
@@ -1367,6 +1367,11 @@ static void virtnet_config_changed(struct virtio_device *vdev) | |||
1367 | 1367 | ||
1368 | static void virtnet_free_queues(struct virtnet_info *vi) | 1368 | static void virtnet_free_queues(struct virtnet_info *vi) |
1369 | { | 1369 | { |
1370 | int i; | ||
1371 | |||
1372 | for (i = 0; i < vi->max_queue_pairs; i++) | ||
1373 | netif_napi_del(&vi->rq[i].napi); | ||
1374 | |||
1370 | kfree(vi->rq); | 1375 | kfree(vi->rq); |
1371 | kfree(vi->sq); | 1376 | kfree(vi->sq); |
1372 | } | 1377 | } |
@@ -1396,10 +1401,10 @@ static void free_unused_bufs(struct virtnet_info *vi) | |||
1396 | struct virtqueue *vq = vi->rq[i].vq; | 1401 | struct virtqueue *vq = vi->rq[i].vq; |
1397 | 1402 | ||
1398 | while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) { | 1403 | while ((buf = virtqueue_detach_unused_buf(vq)) != NULL) { |
1399 | if (vi->big_packets) | 1404 | if (vi->mergeable_rx_bufs) |
1400 | give_pages(&vi->rq[i], buf); | ||
1401 | else if (vi->mergeable_rx_bufs) | ||
1402 | put_page(virt_to_head_page(buf)); | 1405 | put_page(virt_to_head_page(buf)); |
1406 | else if (vi->big_packets) | ||
1407 | give_pages(&vi->rq[i], buf); | ||
1403 | else | 1408 | else |
1404 | dev_kfree_skb(buf); | 1409 | dev_kfree_skb(buf); |
1405 | --vi->rq[i].num; | 1410 | --vi->rq[i].num; |