IB/mlx4: Rework special QP creation error path
authorBart Van Assche <bart.vanassche@sandisk.com>
Mon, 14 Nov 2016 16:44:11 +0000 (08:44 -0800)
committerDoug Ledford <dledford@redhat.com>
Wed, 14 Dec 2016 18:01:11 +0000 (13:01 -0500)
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>
Reviewed-by: Laurence Oberman <loberman@redhat.com>
Reviewed-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/mlx4/qp.c

index c22454383976c4dda19eee489a9f6e93eabd9251..c068add8838bfb0e4626e257fa507c5b84c641b0 100644 (file)
@@ -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 @@ err_db:
                mlx4_db_free(dev->dev, &qp->db);
 
 err:
-       if (!*caller_qp)
+       if (sqp)
+               kfree(sqp);
+       else if (!*caller_qp)
                kfree(qp);
        return err;
 }