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