From ce39f68c127fa0783aa84fc871ab00ae4af95cb3 Mon Sep 17 00:00:00 2001
From: Vlad Zolotarov <vladz@cloudius-systems.com>
Date: Thu, 13 Feb 2014 15:05:36 +0200
Subject: [PATCH] virtio-net: zero req->mhdr.num_buffers

Zero req->mhdr.num_buffers in Tx path when MRG_RXBUF is negotiated as virtio spec demands.

Reviewed-by Zhi Yong Wu <zwu.kernel@gmail.com>
Reviewed-by: Asias He <asias@cloudius-systems.com>
Signed-off-by: Vlad Zolotarov <vladz@cloudius-systems.com>
Signed-off-by: Pekka Enberg <penberg@cloudius-systems.com>
---
 drivers/virtio-net.cc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/virtio-net.cc b/drivers/virtio-net.cc
index 92e3d639f..c5a41d18d 100644
--- a/drivers/virtio-net.cc
+++ b/drivers/virtio-net.cc
@@ -545,6 +545,10 @@ int net::tx_locked(struct mbuf* m_head, bool flush)
         }
     }
 
+    if (_mergeable_bufs) {
+        req->mhdr.num_buffers = 0;
+    }
+
     vq->init_sg();
     vq->add_out_sg(static_cast<void*>(&req->mhdr), _hdr_size);
 
@@ -553,7 +557,6 @@ int net::tx_locked(struct mbuf* m_head, bool flush)
 
         if (frag_len != 0) {
             net_d("Frag len=%d:", frag_len);
-            req->mhdr.num_buffers++;
 
             vq->add_out_sg(m->m_hdr.mh_data, m->m_hdr.mh_len);
             tx_bytes += frag_len;
-- 
GitLab