netdev-dpdk: fix mbuf leaks master
authorYuanhan Liu <yuanhan.liu@linux.intel.com>
Tue, 8 Mar 2016 01:50:48 +0000 (09:50 +0800)
committerDaniele Di Proietto <diproiettod@vmware.com>
Thu, 10 Mar 2016 01:28:21 +0000 (17:28 -0800)
mbufs could be chained (by the "next" field of rte_mbuf struct), when
an mbuf is not big enough to hold a big packet, say when TSO is enabled.

rte_pktmbuf_free_seg() frees the head mbuf only, leading mbuf leaks.
This patch fix it by invoking the right API rte_pktmbuf_free(), to
free all mbufs in the chain.

Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com>
AUTHORS
lib/netdev-dpdk.c

diff --git a/AUTHORS b/AUTHORS
index 0ba0f58..04b8cae 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -226,6 +226,7 @@ YAMAMOTO Takashi        yamamoto@midokura.com
 Yasuhito Takamiya       yasuhito@gmail.com
 Yin Lin                 linyi@vmware.com
 Yu Zhiguo               yuzg@cn.fujitsu.com
+Yuanhan Liu             yuanhan.liu@linux.intel.com
 ZhengLingyun            konghuarukhr@163.com
 Zoltán Balogh           zoltan.balogh@ericsson.com
 Zoltan Kiss             zoltan.kiss@citrix.com
index 0233b3c..f402354 100644 (file)
@@ -396,7 +396,7 @@ free_dpdk_buf(struct dp_packet *p)
 {
     struct rte_mbuf *pkt = (struct rte_mbuf *) p;
 
-    rte_pktmbuf_free_seg(pkt);
+    rte_pktmbuf_free(pkt);
 }
 
 static void
@@ -1089,7 +1089,7 @@ dpdk_queue_flush__(struct netdev_dpdk *dev, int qid)
         int i;
 
         for (i = nb_tx; i < txq->count; i++) {
-            rte_pktmbuf_free_seg(txq->burst_pkts[i]);
+            rte_pktmbuf_free(txq->burst_pkts[i]);
         }
         rte_spinlock_lock(&dev->stats_lock);
         dev->stats.tx_dropped += txq->count-nb_tx;