Thanks for clarifying, I've back ported this up to branch-2.4

On 09/03/2016 17:46, "Yuanhan Liu" <yuanhan....@linux.intel.com> wrote:

>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