diff options
author | Roland Dreier <rolandd@cisco.com> | 2005-10-11 14:08:24 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2005-10-17 18:20:29 -0400 |
commit | 5b6810e048435de508ef66aebd6b78db13d651b8 (patch) | |
tree | b54df96d5821a6ed41d778bf1ecfb54dbc7a4999 /drivers/infiniband/ulp | |
parent | efaae8f71f3088cc73c9e5ceabbd314aa82ac768 (diff) |
[IPoIB] Rename ipoib_create_qp() -> ipoib_init_qp() and fix error cleanup
ipoib_create_qp() no longer creates IPoIB's QP, so it shouldn't
destroy the QP on failure -- that unwinding happens elsewhere, so the
current code can cause a double free. While we're at it, the
function's name should match what it actually does, so rename it to
ipoib_init_qp().
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/ulp')
-rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib.h | 2 | ||||
-rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_ib.c | 4 | ||||
-rw-r--r-- | drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 9 |
3 files changed, 8 insertions, 7 deletions
diff --git a/drivers/infiniband/ulp/ipoib/ipoib.h b/drivers/infiniband/ulp/ipoib/ipoib.h index 4ea1c1ca85bc..6b14bd1c60a0 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib.h +++ b/drivers/infiniband/ulp/ipoib/ipoib.h | |||
@@ -277,7 +277,7 @@ int ipoib_mcast_attach(struct net_device *dev, u16 mlid, | |||
277 | int ipoib_mcast_detach(struct net_device *dev, u16 mlid, | 277 | int ipoib_mcast_detach(struct net_device *dev, u16 mlid, |
278 | union ib_gid *mgid); | 278 | union ib_gid *mgid); |
279 | 279 | ||
280 | int ipoib_qp_create(struct net_device *dev); | 280 | int ipoib_init_qp(struct net_device *dev); |
281 | int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca); | 281 | int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca); |
282 | void ipoib_transport_dev_cleanup(struct net_device *dev); | 282 | void ipoib_transport_dev_cleanup(struct net_device *dev); |
283 | 283 | ||
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_ib.c b/drivers/infiniband/ulp/ipoib/ipoib_ib.c index f7440096b5ed..02d0e0006578 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c | |||
@@ -387,9 +387,9 @@ int ipoib_ib_dev_open(struct net_device *dev) | |||
387 | struct ipoib_dev_priv *priv = netdev_priv(dev); | 387 | struct ipoib_dev_priv *priv = netdev_priv(dev); |
388 | int ret; | 388 | int ret; |
389 | 389 | ||
390 | ret = ipoib_qp_create(dev); | 390 | ret = ipoib_init_qp(dev); |
391 | if (ret) { | 391 | if (ret) { |
392 | ipoib_warn(priv, "ipoib_qp_create returned %d\n", ret); | 392 | ipoib_warn(priv, "ipoib_init_qp returned %d\n", ret); |
393 | return -1; | 393 | return -1; |
394 | } | 394 | } |
395 | 395 | ||
diff --git a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c index 79f59d0563ed..b5902a7ec240 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_verbs.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_verbs.c | |||
@@ -92,7 +92,7 @@ int ipoib_mcast_detach(struct net_device *dev, u16 mlid, union ib_gid *mgid) | |||
92 | return ret; | 92 | return ret; |
93 | } | 93 | } |
94 | 94 | ||
95 | int ipoib_qp_create(struct net_device *dev) | 95 | int ipoib_init_qp(struct net_device *dev) |
96 | { | 96 | { |
97 | struct ipoib_dev_priv *priv = netdev_priv(dev); | 97 | struct ipoib_dev_priv *priv = netdev_priv(dev); |
98 | int ret; | 98 | int ret; |
@@ -149,10 +149,11 @@ int ipoib_qp_create(struct net_device *dev) | |||
149 | return 0; | 149 | return 0; |
150 | 150 | ||
151 | out_fail: | 151 | out_fail: |
152 | ib_destroy_qp(priv->qp); | 152 | qp_attr.qp_state = IB_QPS_RESET; |
153 | priv->qp = NULL; | 153 | if (ib_modify_qp(priv->qp, &qp_attr, IB_QP_STATE)) |
154 | ipoib_warn(priv, "Failed to modify QP to RESET state\n"); | ||
154 | 155 | ||
155 | return -EINVAL; | 156 | return ret; |
156 | } | 157 | } |
157 | 158 | ||
158 | int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca) | 159 | int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca) |