|
@@ -57,21 +57,24 @@ struct ipoib_ah *ipoib_create_ah(struct net_device *dev,
|
|
struct ib_pd *pd, struct ib_ah_attr *attr)
|
|
struct ib_pd *pd, struct ib_ah_attr *attr)
|
|
{
|
|
{
|
|
struct ipoib_ah *ah;
|
|
struct ipoib_ah *ah;
|
|
|
|
+ struct ib_ah *vah;
|
|
|
|
|
|
ah = kmalloc(sizeof *ah, GFP_KERNEL);
|
|
ah = kmalloc(sizeof *ah, GFP_KERNEL);
|
|
if (!ah)
|
|
if (!ah)
|
|
- return NULL;
|
|
|
|
|
|
+ return ERR_PTR(-ENOMEM);
|
|
|
|
|
|
ah->dev = dev;
|
|
ah->dev = dev;
|
|
ah->last_send = 0;
|
|
ah->last_send = 0;
|
|
kref_init(&ah->ref);
|
|
kref_init(&ah->ref);
|
|
|
|
|
|
- ah->ah = ib_create_ah(pd, attr);
|
|
|
|
- if (IS_ERR(ah->ah)) {
|
|
|
|
|
|
+ vah = ib_create_ah(pd, attr);
|
|
|
|
+ if (IS_ERR(vah)) {
|
|
kfree(ah);
|
|
kfree(ah);
|
|
- ah = NULL;
|
|
|
|
- } else
|
|
|
|
|
|
+ ah = (struct ipoib_ah *)vah;
|
|
|
|
+ } else {
|
|
|
|
+ ah->ah = vah;
|
|
ipoib_dbg(netdev_priv(dev), "Created ah %p\n", ah->ah);
|
|
ipoib_dbg(netdev_priv(dev), "Created ah %p\n", ah->ah);
|
|
|
|
+ }
|
|
|
|
|
|
return ah;
|
|
return ah;
|
|
}
|
|
}
|