Fix dpdk_validate_rte-mbuf for chained buffers 68/4068/2
authorPierre Pfister <ppfister@cisco.com>
Fri, 2 Dec 2016 10:55:13 +0000 (10:55 +0000)
committerDamjan Marion <dmarion.lists@gmail.com>
Fri, 2 Dec 2016 12:25:09 +0000 (12:25 +0000)
Change I4ad40f398f7b5cf introduced a bug with chained buffers.
This patch should fix it.

Change-Id: Ia409d5eb90fcd6d7ff3c7da0836edfd2eb25998b
Signed-off-by: Pierre Pfister <ppfister@cisco.com>
vnet/vnet/devices/dpdk/device.c

index 9f40c27..800a06c 100644 (file)
@@ -160,12 +160,13 @@ dpdk_validate_rte_mbuf (vlib_main_t * vm, vlib_buffer_t * b,
      rte_mbuf header */
   if (PREDICT_FALSE ((b->flags & VNET_BUFFER_RTE_MBUF_VALID) == 0))
     {
-      last_mb = mb = rte_mbuf_from_vlib_buffer (b);
+      vlib_buffer_t *b2 = b;
+      last_mb = mb = rte_mbuf_from_vlib_buffer (b2);
       rte_pktmbuf_reset (mb);
-      while (maybe_multiseg && (b->flags & VLIB_BUFFER_NEXT_PRESENT))
+      while (maybe_multiseg && (b2->flags & VLIB_BUFFER_NEXT_PRESENT))
        {
-         b = vlib_get_buffer (vm, b->next_buffer);
-         mb = rte_mbuf_from_vlib_buffer (b);
+         b2 = vlib_get_buffer (vm, b2->next_buffer);
+         mb = rte_mbuf_from_vlib_buffer (b2);
          last_mb->next = mb;
          last_mb = mb;
          rte_pktmbuf_reset (mb);