Message ID | 3a41daa7-cfb8-7374-5dab-dfa3b1bf83ff@sandisk.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
----- Original Message ----- > From: "Bart Van Assche" <bart.vanassche@sandisk.com> > To: "Doug Ledford" <dledford@redhat.com> > Cc: "Yishai Hadas" <yishaih@mellanox.com>, linux-rdma@vger.kernel.org > Sent: Monday, November 14, 2016 11:44:11 AM > Subject: [PATCH] IB/mlx4: Rework special QP creation error path > > The special QP creation error path relies on offset_of(struct mlx4_ib_sqp, > qp) == 0. Remove this assumption because that makes the QP creation > code easier to understand. > > Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> > Cc: Yishai Hadas <yishaih@mellanox.com> > --- > drivers/infiniband/hw/mlx4/qp.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/infiniband/hw/mlx4/qp.c > b/drivers/infiniband/hw/mlx4/qp.c > index 570bc86..b63d6be 100644 > --- a/drivers/infiniband/hw/mlx4/qp.c > +++ b/drivers/infiniband/hw/mlx4/qp.c > @@ -644,7 +644,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, > struct ib_pd *pd, > int qpn; > int err; > struct ib_qp_cap backup_cap; > - struct mlx4_ib_sqp *sqp; > + struct mlx4_ib_sqp *sqp = NULL; > struct mlx4_ib_qp *qp; > enum mlx4_ib_qp_type qp_type = (enum mlx4_ib_qp_type) init_attr->qp_type; > struct mlx4_ib_cq *mcq; > @@ -933,7 +933,9 @@ static int create_qp_common(struct mlx4_ib_dev *dev, > struct ib_pd *pd, > mlx4_db_free(dev->dev, &qp->db); > > err: > - if (!*caller_qp) > + if (sqp) > + kfree(sqp); > + else if (!*caller_qp) > kfree(qp); > return err; > } > -- > 2.10.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-rdma" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > This looks fine to me. Reviewed-by: Laurence Oberman <loberman@redhat.com> -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 11/14/2016 6:44 PM, Bart Van Assche wrote: > The special QP creation error path relies on offset_of(struct mlx4_ib_sqp, > qp) == 0. Remove this assumption because that makes the QP creation > code easier to understand. > > Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> > Cc: Yishai Hadas <yishaih@mellanox.com> > --- > drivers/infiniband/hw/mlx4/qp.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c > index 570bc86..b63d6be 100644 > --- a/drivers/infiniband/hw/mlx4/qp.c > +++ b/drivers/infiniband/hw/mlx4/qp.c > @@ -644,7 +644,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd, > int qpn; > int err; > struct ib_qp_cap backup_cap; > - struct mlx4_ib_sqp *sqp; > + struct mlx4_ib_sqp *sqp = NULL; > struct mlx4_ib_qp *qp; > enum mlx4_ib_qp_type qp_type = (enum mlx4_ib_qp_type) init_attr->qp_type; > struct mlx4_ib_cq *mcq; > @@ -933,7 +933,9 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd, > mlx4_db_free(dev->dev, &qp->db); > > err: > - if (!*caller_qp) > + if (sqp) > + kfree(sqp); > + else if (!*caller_qp) > kfree(qp); > return err; > } > Looks fine, thanks. Reviewed-by: Yishai Hadas <yishaih@mellanox.com> -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 11/14/2016 11:44 AM, Bart Van Assche wrote: > The special QP creation error path relies on offset_of(struct mlx4_ib_sqp, > qp) == 0. Remove this assumption because that makes the QP creation > code easier to understand. > > Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> > Cc: Yishai Hadas <yishaih@mellanox.com> Thanks, applied.
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index 570bc86..b63d6be 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c @@ -644,7 +644,7 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd, int qpn; int err; struct ib_qp_cap backup_cap; - struct mlx4_ib_sqp *sqp; + struct mlx4_ib_sqp *sqp = NULL; struct mlx4_ib_qp *qp; enum mlx4_ib_qp_type qp_type = (enum mlx4_ib_qp_type) init_attr->qp_type; struct mlx4_ib_cq *mcq; @@ -933,7 +933,9 @@ static int create_qp_common(struct mlx4_ib_dev *dev, struct ib_pd *pd, mlx4_db_free(dev->dev, &qp->db); err: - if (!*caller_qp) + if (sqp) + kfree(sqp); + else if (!*caller_qp) kfree(qp); return err; }
The special QP creation error path relies on offset_of(struct mlx4_ib_sqp, qp) == 0. Remove this assumption because that makes the QP creation code easier to understand. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Cc: Yishai Hadas <yishaih@mellanox.com> --- drivers/infiniband/hw/mlx4/qp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)