From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pg0-f43.google.com (mail-pg0-f43.google.com [74.125.83.43]) by dpdk.org (Postfix) with ESMTP id 0BBAB2BAF for ; Wed, 30 Aug 2017 12:31:07 +0200 (CEST) Received: by mail-pg0-f43.google.com with SMTP id r133so18775758pgr.3 for ; Wed, 30 Aug 2017 03:31:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fridaylinux-org.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=PShVOsSfN7w6HFjkWqzlksf3g3u+C9MqBKwnNtZAvL0=; b=jn2CTCl7M7PboY5Khr0huhrBtZOLLjhIi5foiz/Y5T22LtO7KWd0PXwPgfCEGVvIdg 1M4V3tEObbUU2jYC0OrGZvlb0BgraYzdiqj0UEEaTHNx8s1Iovmf7dR5DIUCAGVQr8mD xX8XhDcthEAluwxLOGa2diXFVa7Btr5XUU9zEC0qw7QbzqhluWGQRzE9iobdOeLdshNA MO00/rh9xaPmLXDMcNDmObhi9d5zIMj864FlB8nQGVg4+r7uTSN+6qKIou2MsCBinfdI 0qWF7iUVoeiUVJmvKOWRh2RqFYCfhK4HFdo5MOg+vjNyqVJVeEUjIzhF/B5ccmWvW105 unrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=PShVOsSfN7w6HFjkWqzlksf3g3u+C9MqBKwnNtZAvL0=; b=NYJg5b/4lS3XNjS3f15fjBEHpnAVausoZZml9Vmz5GwtQsqGwXF/+EGww3awmdmHE2 3/EgrqBza8iiyH5IFwyGd8r3w40bfg6hBmsAnQn/vaxlZQeCwKLXHOTYvlJG8UOD2+K7 3DUzghzpOSmMlsPqpeLb4xSVQMn4adLO4iRnKm76yGjdLaZ5XF42Npi0YS66pV1DqfwZ tNMxAUeRJP7NRZprG9PHp/QrEj/mmGJEhOQGQr8UUsZIPyiEkMoW4AGRKCH+Q1R/GTYs kz6QEVXgYN5yDjSJ3yVufRKK1Ljpy1yyNk15I3iW6IPaGlhiTkkLFuptAo4wIg0kaIGg gS/w== X-Gm-Message-State: AHYfb5j3h0QjBDDngiOrBKeHWP4EvgfjBnZJoYEFwzgoqqNl2U6K2YAG tKDEeeLshyNEvnXf+x+qLA== X-Received: by 10.84.218.134 with SMTP id r6mr1335967pli.31.1504089066230; Wed, 30 Aug 2017 03:31:06 -0700 (PDT) Received: from yliu-home ([45.63.61.64]) by smtp.gmail.com with ESMTPSA id d67sm9542422pfg.27.2017.08.30.03.31.03 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 30 Aug 2017 03:31:04 -0700 (PDT) Date: Wed, 30 Aug 2017 18:30:58 +0800 From: Yuanhan Liu To: Yuanhan Liu Cc: Dahir Osman , Matt Peters , Allain Legacy , Konstantin Ananyev , dpdk stable Message-ID: <20170830103058.GK9736@yliu-home> References: <1503305065-23998-1-git-send-email-yuanhanl@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1503305065-23998-1-git-send-email-yuanhanl@mellanox.com> User-Agent: Mutt/1.5.24 (2015-08-30) Subject: Re: [dpdk-stable] patch 'ip_frag: free mbufs on reassembly table destroy' has been queued to stable release 17.05.2 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Aug 2017 10:31:07 -0000 On Mon, Aug 21, 2017 at 04:42:30PM +0800, Yuanhan Liu wrote: > Hi, > > FYI, your patch has been queued to stable release 17.05.2 > > Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. > It will be pushed if I get no objections before 08/24/17. So please > shout if anyone has objections. This commit exports an inlined function to a public API: the map file references DPDK 17.08. I think it's better to not put it in a stable release. Thus, it's been reverted. --yliu > --- > >From 4aa29d2e55301e887a15c2a79f68507b7f65db84 Mon Sep 17 00:00:00 2001 > From: Dahir Osman > Date: Mon, 5 Jun 2017 11:49:01 -0400 > Subject: [PATCH] ip_frag: free mbufs on reassembly table destroy > > [ upstream commit 95908f52393da36c47905a777f64c0650585c12b ] > > The rte_ip_frag_table_destroy procedure simply releases the memory for the > table without freeing the packet buffers that may be referenced in the hash > table for in-flight or incomplete packet reassembly operations. To prevent > leaked mbufs go through the list of fragments and free each one > individually. > > Fixes: 416707812c03 ("ip_frag: refactor reassembly code into a proper library") > > Reported-by: Matt Peters > Signed-off-by: Allain Legacy > Acked-by: Konstantin Ananyev > --- > lib/librte_ip_frag/ip_frag_common.h | 20 ++++++++++++++++++++ > lib/librte_ip_frag/rte_ip_frag.h | 7 ++----- > lib/librte_ip_frag/rte_ip_frag_common.c | 13 +++++++++++++ > lib/librte_ip_frag/rte_ipfrag_version.map | 7 +++++++ > 4 files changed, 42 insertions(+), 5 deletions(-) > > diff --git a/lib/librte_ip_frag/ip_frag_common.h b/lib/librte_ip_frag/ip_frag_common.h > index 835e4f9..9f56196 100644 > --- a/lib/librte_ip_frag/ip_frag_common.h > +++ b/lib/librte_ip_frag/ip_frag_common.h > @@ -130,6 +130,26 @@ ip_frag_free(struct ip_frag_pkt *fp, struct rte_ip_frag_death_row *dr) > dr->cnt = k; > } > > +/* delete fragment's mbufs immediately instead of using death row */ > +static inline void > +ip_frag_free_immediate(struct ip_frag_pkt *fp) > +{ > + uint32_t i; > + > + for (i = 0; i < fp->last_idx; i++) { > + if (fp->frags[i].mb != NULL) { > + IP_FRAG_LOG(DEBUG, "%s:%d\n" > + "mbuf: %p, tms: %" PRIu64", key: <%" PRIx64 ", %#x>\n", > + __func__, __LINE__, fp->frags[i].mb, fp->start, > + fp->key.src_dst[0], fp->key.id); > + rte_pktmbuf_free(fp->frags[i].mb); > + fp->frags[i].mb = NULL; > + } > + } > + > + fp->last_idx = 0; > +} > + > /* if key is empty, mark key as in use */ > static inline void > ip_frag_inuse(struct rte_ip_frag_tbl *tbl, const struct ip_frag_pkt *fp) > diff --git a/lib/librte_ip_frag/rte_ip_frag.h b/lib/librte_ip_frag/rte_ip_frag.h > index 6708906..ff16f4c 100644 > --- a/lib/librte_ip_frag/rte_ip_frag.h > +++ b/lib/librte_ip_frag/rte_ip_frag.h > @@ -180,11 +180,8 @@ struct rte_ip_frag_tbl * rte_ip_frag_table_create(uint32_t bucket_num, > * @param tbl > * Fragmentation table to free. > */ > -static inline void > -rte_ip_frag_table_destroy(struct rte_ip_frag_tbl *tbl) > -{ > - rte_free(tbl); > -} > +void > +rte_ip_frag_table_destroy(struct rte_ip_frag_tbl *tbl); > > /** > * This function implements the fragmentation of IPv6 packets. > diff --git a/lib/librte_ip_frag/rte_ip_frag_common.c b/lib/librte_ip_frag/rte_ip_frag_common.c > index 6176ff4..8460f8e 100644 > --- a/lib/librte_ip_frag/rte_ip_frag_common.c > +++ b/lib/librte_ip_frag/rte_ip_frag_common.c > @@ -109,6 +109,19 @@ rte_ip_frag_table_create(uint32_t bucket_num, uint32_t bucket_entries, > return tbl; > } > > +/* delete fragmentation table */ > +void > +rte_ip_frag_table_destroy(struct rte_ip_frag_tbl *tbl) > +{ > + struct ip_frag_pkt *fp; > + > + TAILQ_FOREACH(fp, &tbl->lru, lru) { > + ip_frag_free_immediate(fp); > + } > + > + rte_free(tbl); > +} > + > /* dump frag table statistics to file */ > void > rte_ip_frag_table_statistics_dump(FILE *f, const struct rte_ip_frag_tbl *tbl) > diff --git a/lib/librte_ip_frag/rte_ipfrag_version.map b/lib/librte_ip_frag/rte_ipfrag_version.map > index 354fa08..d1acf07 100644 > --- a/lib/librte_ip_frag/rte_ipfrag_version.map > +++ b/lib/librte_ip_frag/rte_ipfrag_version.map > @@ -11,3 +11,10 @@ DPDK_2.0 { > > local: *; > }; > + > +DPDK_17.08 { > + global: > + > + rte_ip_frag_table_destroy; > + > +} DPDK_2.0; > -- > 2.7.4