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

Reply via email to