On Thu, Mar 10, 2016 at 01:33:03AM +0000, Daniele Di Proietto wrote: > Thanks for the patch! > > Were you able to hit this bug in your setup or did you just > find this by code inspection?
Yes, it's a 100% reproducible bug if you have TSO enabled, which is a feature has been merged for DPDK v2.3 (well, it's been renamed to v16.04). > I'm asking because I'm wondering whether we should backport > the fix. I would say yes. I mean, you should really use rte_pktmbuf_free(), the right API to free a mbuf. rte_pktmbuf_free_segs() is more like an internal helper function used by rte_pktmbuf_free(). > In any case I've applied this to master and added your name > to the AUTHORS file, thanks! Thanks. --yliu > > On 07/03/2016 17:50, "dev on behalf of Yuanhan Liu" > <dev-boun...@openvswitch.org on behalf of yuanhan....@linux.intel.com> > wrote: > > >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....@linux.intel.com> > >--- > > lib/netdev-dpdk.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > >diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c > >index 0233b3c..f402354 100644 > >--- a/lib/netdev-dpdk.c > >+++ b/lib/netdev-dpdk.c > >@@ -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; > >-- > >1.9.0 > > > >_______________________________________________ > >dev mailing list > >dev@openvswitch.org > >http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev