From: "Ananyev, Konstantin" <konstantin.ananyev@intel.com> To: Stephen Hemminger <stephen@networkplumber.org>, "dev@dpdk.org" <dev@dpdk.org> Subject: Re: [dpdk-dev] [PATCH] mempool: don't leak ring on failure Date: Tue, 24 Jun 2014 16:16:02 +0000 Message-ID: <2601191342CEEE43887BDE71AB977258213340B1@IRSMSX105.ger.corp.intel.com> (raw) In-Reply-To: <20140624084948.6d4ab3cd@nehalam.linuxnetplumber.net> Hi Stephen, > > If mempool can not be created because of insufficient memory > it returns an error but has already created a ring (and leaves it > behind). This prevents code from trying one mempool size and then > retrying with a smaller size if the bigger size fails. > > Reordering to do ring creation after getting memory fixes > the problem. > But now, memzone created for the actual mempool could get leaked instead? > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> > > > --- a/lib/librte_mempool/rte_mempool.c 2014-06-24 08:20:28.513771717 -0700 > +++ b/lib/librte_mempool/rte_mempool.c 2014-06-24 08:20:28.513771717 -0700 > @@ -473,15 +473,6 @@ rte_mempool_xmem_create(const char *name > > rte_rwlock_write_lock(RTE_EAL_MEMPOOL_RWLOCK); > > - /* allocate the ring that will be used to store objects */ > - /* Ring functions will return appropriate errors if we are > - * running as a secondary process etc., so no checks made > - * in this function for that condition */ > - rte_snprintf(rg_name, sizeof(rg_name), RTE_MEMPOOL_MZ_FORMAT, name); > - r = rte_ring_create(rg_name, rte_align32pow2(n+1), socket_id, rg_flags); > - if (r == NULL) > - goto exit; > - > /* > * reserve a memory zone for this mempool: private data is > * cache-aligned > @@ -542,6 +533,15 @@ rte_mempool_xmem_create(const char *name > startaddr = (void*)addr; > } > > + /* allocate the ring that will be used to store objects */ > + /* Ring functions will return appropriate errors if we are > + * running as a secondary process etc., so no checks made > + * in this function for that condition */ > + rte_snprintf(rg_name, sizeof(rg_name), RTE_MEMPOOL_MZ_FORMAT, name); > + r = rte_ring_create(rg_name, rte_align32pow2(n+1), socket_id, rg_flags); > + if (r == NULL) > + goto exit; > + > /* init the mempool structure */ > mp = startaddr; > memset(mp, 0, sizeof(*mp));
next prev parent reply other threads:[~2014-06-24 16:17 UTC|newest] Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-06-24 15:49 Stephen Hemminger 2014-06-24 16:16 ` Ananyev, Konstantin [this message] 2014-06-24 17:40 ` Stephen Hemminger 2014-06-24 17:48 ` Ananyev, Konstantin 2014-06-24 17:41 ` Richardson, Bruce 2014-06-25 7:46 ` Olivier MATZ 2014-06-25 8:01 ` Olivier MATZ
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=2601191342CEEE43887BDE71AB977258213340B1@IRSMSX105.ger.corp.intel.com \ --to=konstantin.ananyev@intel.com \ --cc=dev@dpdk.org \ --cc=stephen@networkplumber.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git