Some functions did not set rte_errno; for avoiding that, they are turned into single-exit ones.
Bugzilla ID: 1559 Signed-off-by: Ariel Otilibili <ariel.otilib...@6wind.com> --- lib/mempool/rte_mempool_ops.c | 38 ++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/lib/mempool/rte_mempool_ops.c b/lib/mempool/rte_mempool_ops.c index b5c68ac61b67..bf4328645196 100644 --- a/lib/mempool/rte_mempool_ops.c +++ b/lib/mempool/rte_mempool_ops.c @@ -33,7 +33,9 @@ rte_mempool_register_ops(const struct rte_mempool_ops *h) rte_spinlock_unlock(&rte_mempool_ops_table.sl); RTE_MEMPOOL_LOG(ERR, "Maximum number of mempool ops structs exceeded"); - return -ENOSPC; + rte_errno = ENOSPC; + ops_index = -rte_errno; + goto out; } if (h->alloc == NULL || h->enqueue == NULL || @@ -41,7 +43,9 @@ rte_mempool_register_ops(const struct rte_mempool_ops *h) rte_spinlock_unlock(&rte_mempool_ops_table.sl); RTE_MEMPOOL_LOG(ERR, "Missing callback while registering mempool ops"); - return -EINVAL; + rte_errno = -EINVAL; + ops_index = -rte_errno; + goto out; } if (strlen(h->name) >= sizeof(ops->name) - 1) { @@ -49,7 +53,8 @@ rte_mempool_register_ops(const struct rte_mempool_ops *h) RTE_MEMPOOL_LOG(DEBUG, "%s(): mempool_ops <%s>: name too long", __func__, h->name); rte_errno = EEXIST; - return -EEXIST; + ops_index = -rte_errno; + goto out; } ops_index = rte_mempool_ops_table.num_ops++; @@ -67,6 +72,7 @@ rte_mempool_register_ops(const struct rte_mempool_ops *h) rte_spinlock_unlock(&rte_mempool_ops_table.sl); +out: return ops_index; } @@ -151,12 +157,19 @@ rte_mempool_ops_get_info(const struct rte_mempool *mp, struct rte_mempool_info *info) { struct rte_mempool_ops *ops; + int ret; ops = rte_mempool_get_ops(mp->ops_index); - if (ops->get_info == NULL) - return -ENOTSUP; - return ops->get_info(mp, info); + if (ops->get_info == NULL) { + rte_errno = ENOTSUP; + ret = -rte_errno; + goto out; + } + ret = ops->get_info(mp, info); + +out: + return ret; } @@ -166,12 +179,14 @@ rte_mempool_set_ops_byname(struct rte_mempool *mp, const char *name, void *pool_config) { struct rte_mempool_ops *ops = NULL; + int ret = 0; unsigned i; /* too late, the mempool is already populated. */ if (mp->flags & RTE_MEMPOOL_F_POOL_CREATED) { rte_errno = EEXIST; - return -rte_errno; + ret = -rte_errno; + goto out; } for (i = 0; i < rte_mempool_ops_table.num_ops; i++) { @@ -182,13 +197,16 @@ rte_mempool_set_ops_byname(struct rte_mempool *mp, const char *name, } } - if (ops == NULL) { + if (!ops) { rte_errno = EINVAL; - return -rte_errno; + ret = -rte_errno; + goto out; } mp->ops_index = i; mp->pool_config = pool_config; rte_mempool_trace_set_ops_byname(mp, name, pool_config); - return 0; + +out: + return ret; } -- 2.30.2