> …
>> +++ b/drivers/infiniband/sw/rdmavt/qp.c
>> @@ -1203,6 +1203,7 @@ struct ib_qp *rvt_create_qp(struct ib_pd *ibpd,
>> qp->s_flags = RVT_S_SIGNAL_REQ_WR;
>> err = alloc_ud_wq_attr(qp, rdi->dparms.node);
>> if (err) {
>> + rvt_free_rq(&qp->r_rq);
>> ret = (ERR_PTR(err));
>> goto bail_driver_priv;
>> }
>
> How do you think about the following code variant with the addition
> of a jump target?
>
> err = alloc_ud_wq_attr(qp, rdi->dparms.node);
> if (err) {
> ret = (ERR_PTR(err));
> - goto bail_driver_priv;
> + goto bail_free_rq;
> }
>
> …
>
> bail_rq_wq:
> - rvt_free_rq(&qp->r_rq);
> free_ud_wq_attr(qp);
> +
> +bail_free_rq:
> + rvt_free_rq(&qp->r_rq);
>
> bail_driver_priv:
The improvement of affected implementation details is continued with
another update suggestion.
RDMA/rvt: Fix potential memory leak caused by rvt_alloc_rq
https://lore.kernel.org/linux-rdma/[email protected]/
https://lore.kernel.org/patchwork/patch/1255709/
Regards,
Markus