compress/mlx5: fix leak on QP setup failure
[dpdk.git] / drivers / compress / mlx5 / mlx5_compress.c
index 883e720..c5e0a83 100644 (file)
@@ -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;