vhost: fix return value on dequeue path
authorJiayu Hu <jiayu.hu@intel.com>
Wed, 25 Jul 2018 08:21:42 +0000 (16:21 +0800)
committerTiwei Bie <tiwei.bie@intel.com>
Thu, 26 Jul 2018 08:02:43 +0000 (10:02 +0200)
This patch fixes the incorrect return value for rte_vhost_dequeue_burst()
when virtqueue is not enabled or virtqueue address translation fails.

Fixes: 62250c1d0978 ("vhost: extract split ring handling from Rx and Tx functions")

Signed-off-by: Jiayu Hu <jiayu.hu@intel.com>
Reviewed-by: Jens Freimann <jfreimann@redhat.com>
Acked-by: Tiwei Bie <tiwei.bie@intel.com>
lib/librte_vhost/virtio_net.c

index 07cc0c8..a8b4c96 100644 (file)
@@ -1594,15 +1594,19 @@ rte_vhost_dequeue_burst(int vid, uint16_t queue_id,
        if (unlikely(rte_spinlock_trylock(&vq->access_lock) == 0))
                return 0;
 
-       if (unlikely(vq->enabled == 0))
+       if (unlikely(vq->enabled == 0)) {
+               count = 0;
                goto out_access_unlock;
+       }
 
        if (dev->features & (1ULL << VIRTIO_F_IOMMU_PLATFORM))
                vhost_user_iotlb_rd_lock(vq);
 
        if (unlikely(vq->access_ok == 0))
-               if (unlikely(vring_translate(dev, vq) < 0))
+               if (unlikely(vring_translate(dev, vq) < 0)) {
+                       count = 0;
                        goto out;
+               }
 
        /*
         * Construct a RARP broadcast packet, and inject it to the "pkts"