Thanks for the patch!

Were you able to hit this bug in your setup or did you just
find this by code inspection?

I'm asking because I'm wondering whether we should backport
the fix.

In any case I've applied this to master and added your name
to the AUTHORS file, thanks!

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