dpdk_buffer.c: Honor clone_count even when there isn't a freelist handler 14/214/2
authorKevin Paul Herbert <kph@cisco.com>
Wed, 16 Dec 2015 00:56:50 +0000 (16:56 -0800)
committerGerrit Code Review <gerrit@fd.io>
Thu, 4 Feb 2016 12:42:30 +0000 (12:42 +0000)
The DPDK glue did not support cloned packets which do not
have a freelist handler. Add support for this case.

Change-Id: I8f17cd4952df97989d90d3f3e39792bc3739705c
Signed-off-by: Kevin Paul Herbert <kph@cisco.com>
vlib/vlib/dpdk_buffer.c

index 43612a8..9db84a1 100644 (file)
@@ -724,10 +724,13 @@ vlib_buffer_free_inline (vlib_main_t * vm,
         }
       else
         {
-          mb = ((struct rte_mbuf *)b)-1;
-          ASSERT(rte_mbuf_refcnt_read(mb) == 1);
-          rte_pktmbuf_free (mb);
-        }
+         if (PREDICT_TRUE (b->clone_count == 0))
+           {
+             mb = ((struct rte_mbuf *)b)-1;
+             ASSERT(rte_mbuf_refcnt_read(mb) == 1);
+             rte_pktmbuf_free (mb);
+           }
+       }
     }
   if (vec_len(bm->announce_list))
     {