Hi Stephen, On 03/30/2016 11:46 PM, Stephen Hemminger wrote: > On Wed, 30 Mar 2016 17:30:24 +0200 > Olivier Matz <olivier.matz at 6wind.com> wrote: > >> diff --git a/lib/librte_lpm/rte_lpm6.c b/lib/librte_lpm/rte_lpm6.c >> index 4c44cd7..9877a30 100644 >> --- a/lib/librte_lpm/rte_lpm6.c >> +++ b/lib/librte_lpm/rte_lpm6.c >> @@ -182,8 +182,11 @@ rte_lpm6_create(const char *name, int socket_id, >> if (strncmp(name, lpm->name, RTE_LPM6_NAMESIZE) == 0) >> break; >> } >> - if (te != NULL) >> + if (te != NULL) { >> + lpm = NULL; >> + rte_errno = EEXIST; >> goto exit; >> + } >> >> /* allocate tailq entry */ >> > > with older memzone model, objects in huge memory area were never freed. > That means when application restarts it finds the old LPM and works. > With your change it would break such an application. >
Could you be more precise about the use case you are describing? Are you talking about a secondary process? The API description of lpm and hash says since the first release that EEXIST should be returned if a memzone with the same name already exists: * @return * Handle to LPM object on success, NULL otherwise with rte_errno set * to an appropriate values. Possible rte_errno values include: * - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure * - E_RTE_SECONDARY - function was called from a secondary process instance * - EINVAL - invalid parameter passed to function * - ENOSPC - the maximum number of memzones has already been allocated * - EEXIST - a memzone with the same name already exists * - ENOMEM - no appropriate memory area found in which to create memzone */ struct rte_lpm * rte_lpm_create(const char *name, int socket_id, const struct rte_lpm_config *config); * @return * Pointer to hash table structure that is used in future hash table * operations, or NULL on error, with error code set in rte_errno. * Possible rte_errno errors include: * - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure * - E_RTE_SECONDARY - function was called from a secondary process instance * - ENOENT - missing entry * - EINVAL - invalid parameter passed to function * - ENOSPC - the maximum number of memzones has already been allocated * - EEXIST - a memzone with the same name already exists * - ENOMEM - no appropriate memory area found in which to create memzone */ struct rte_hash * rte_hash_create(const struct rte_hash_parameters *params); >From my point of view, the behavior I'm fixing is more a bug fix than an API change. But if required, I can send a deprecation notice for 16.04 and have the fix integrated for 16.07.