compress/mlx5: fix leak on QP setup failure
The QP setup function allocates buffer for its
opaque MR and register it into MR structure.
After buffer allocation and before MR registration,
it tries allocate MR Btree.
When the MR Btree allocation fails, the buffer was
not freed what caused a memory leak.
Allocate the MR Btree before buffer alloction.
Fixes: 0165bccdb4
("compress/mlx5: add memory region management")
Cc: stable@dpdk.org
Signed-off-by: Michael Baum <michaelba@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
This commit is contained in:
parent
80d56d2d35
commit
12b253ee87
@ -207,6 +207,13 @@ mlx5_compress_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,
|
||||
return -rte_errno;
|
||||
}
|
||||
dev->data->queue_pairs[qp_id] = qp;
|
||||
if (mlx5_mr_btree_init(&qp->mr_ctrl.cache_bh, MLX5_MR_BTREE_CACHE_N,
|
||||
priv->dev_config.socket_id)) {
|
||||
DRV_LOG(ERR, "Cannot allocate MR Btree for qp %u.",
|
||||
(uint32_t)qp_id);
|
||||
rte_errno = ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
opaq_buf = rte_calloc(__func__, (size_t)1 << log_ops_n,
|
||||
sizeof(struct mlx5_gga_compress_opaque),
|
||||
sizeof(struct mlx5_gga_compress_opaque));
|
||||
@ -215,13 +222,6 @@ mlx5_compress_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,
|
||||
rte_errno = ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
if (mlx5_mr_btree_init(&qp->mr_ctrl.cache_bh, MLX5_MR_BTREE_CACHE_N,
|
||||
priv->dev_config.socket_id)) {
|
||||
DRV_LOG(ERR, "Cannot allocate MR Btree for qp %u.",
|
||||
(uint32_t)qp_id);
|
||||
rte_errno = ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
qp->entries_n = 1 << log_ops_n;
|
||||
qp->socket_id = socket_id;
|
||||
qp->qp_id = qp_id;
|
||||
|
Loading…
Reference in New Issue
Block a user