diff options
Diffstat (limited to 'drivers/infiniband/hw/cxgb4/cm.c')
| -rw-r--r-- | drivers/infiniband/hw/cxgb4/cm.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c index 0668bb3472d..0cf61554f17 100644 --- a/drivers/infiniband/hw/cxgb4/cm.c +++ b/drivers/infiniband/hw/cxgb4/cm.c @@ -1562,11 +1562,11 @@ static int import_ep(struct c4iw_ep *ep, __be32 peer_ip, struct dst_entry *dst,  	struct neighbour *n;  	int err, step; -	rcu_read_lock(); -	n = dst_get_neighbour_noref(dst); -	err = -ENODEV; +	n = dst_neigh_lookup(dst, &peer_ip);  	if (!n) -		goto out; +		return -ENODEV; + +	rcu_read_lock();  	err = -ENOMEM;  	if (n->dev->flags & IFF_LOOPBACK) {  		struct net_device *pdev; @@ -1614,6 +1614,8 @@ static int import_ep(struct c4iw_ep *ep, __be32 peer_ip, struct dst_entry *dst,  out:  	rcu_read_unlock(); +	neigh_release(n); +  	return err;  }  |