mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-30 08:06:49 +07:00
IB/ipath: Fix error path in QP creation
This patch fixes the code which frees the partially allocated QP resources if there was an error while creating the QP. In particular, the QPN wasn't deallocated and the QP wasn't removed from the hash table. Signed-off-by: Ralph Campbell <ralph.campbell@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
fb74dacb0f
commit
8a278e6d57
@ -835,7 +835,8 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
|
||||
init_attr->qp_type);
|
||||
if (err) {
|
||||
ret = ERR_PTR(err);
|
||||
goto bail_rwq;
|
||||
vfree(qp->r_rq.wq);
|
||||
goto bail_qp;
|
||||
}
|
||||
qp->ip = NULL;
|
||||
ipath_reset_qp(qp);
|
||||
@ -863,7 +864,7 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
|
||||
sizeof(offset));
|
||||
if (err) {
|
||||
ret = ERR_PTR(err);
|
||||
goto bail_rwq;
|
||||
goto bail_ip;
|
||||
}
|
||||
} else {
|
||||
u32 s = sizeof(struct ipath_rwq) +
|
||||
@ -875,7 +876,7 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
|
||||
qp->r_rq.wq);
|
||||
if (!qp->ip) {
|
||||
ret = ERR_PTR(-ENOMEM);
|
||||
goto bail_rwq;
|
||||
goto bail_ip;
|
||||
}
|
||||
|
||||
err = ib_copy_to_udata(udata, &(qp->ip->offset),
|
||||
@ -907,9 +908,11 @@ struct ib_qp *ipath_create_qp(struct ib_pd *ibpd,
|
||||
goto bail;
|
||||
|
||||
bail_ip:
|
||||
kfree(qp->ip);
|
||||
bail_rwq:
|
||||
vfree(qp->r_rq.wq);
|
||||
if (qp->ip)
|
||||
kref_put(&qp->ip->ref, ipath_release_mmap_info);
|
||||
else
|
||||
vfree(qp->r_rq.wq);
|
||||
ipath_free_qp(&dev->qp_table, qp);
|
||||
bail_qp:
|
||||
kfree(qp);
|
||||
bail_swq:
|
||||
|
Loading…
Reference in New Issue
Block a user