2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 14:25:26 +00:00

netdev-dpdk: fix mbuf leaks

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>
This commit is contained in:
Yuanhan Liu
2016-03-08 09:50:48 +08:00
committed by Daniele Di Proietto
parent f76def2592
commit b00b4a8149
2 changed files with 3 additions and 2 deletions

View File

@@ -226,6 +226,7 @@ YAMAMOTO Takashi yamamoto@midokura.com
Yasuhito Takamiya yasuhito@gmail.com Yasuhito Takamiya yasuhito@gmail.com
Yin Lin linyi@vmware.com Yin Lin linyi@vmware.com
Yu Zhiguo yuzg@cn.fujitsu.com Yu Zhiguo yuzg@cn.fujitsu.com
Yuanhan Liu yuanhan.liu@linux.intel.com
ZhengLingyun konghuarukhr@163.com ZhengLingyun konghuarukhr@163.com
Zoltán Balogh zoltan.balogh@ericsson.com Zoltán Balogh zoltan.balogh@ericsson.com
Zoltan Kiss zoltan.kiss@citrix.com Zoltan Kiss zoltan.kiss@citrix.com

View File

@@ -396,7 +396,7 @@ free_dpdk_buf(struct dp_packet *p)
{ {
struct rte_mbuf *pkt = (struct rte_mbuf *) p; struct rte_mbuf *pkt = (struct rte_mbuf *) p;
rte_pktmbuf_free_seg(pkt); rte_pktmbuf_free(pkt);
} }
static void static void
@@ -1089,7 +1089,7 @@ dpdk_queue_flush__(struct netdev_dpdk *dev, int qid)
int i; int i;
for (i = nb_tx; i < txq->count; 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); rte_spinlock_lock(&dev->stats_lock);
dev->stats.tx_dropped += txq->count-nb_tx; dev->stats.tx_dropped += txq->count-nb_tx;