diff options
Diffstat (limited to 'drivers/infiniband/hw/irdma/utils.c')
| -rw-r--r-- | drivers/infiniband/hw/irdma/utils.c | 21 | 
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/infiniband/hw/irdma/utils.c b/drivers/infiniband/hw/irdma/utils.c index 346c2c5dabdf..81760415d66c 100644 --- a/drivers/infiniband/hw/irdma/utils.c +++ b/drivers/infiniband/hw/irdma/utils.c @@ -258,18 +258,16 @@ int irdma_net_event(struct notifier_block *notifier, unsigned long event,  	u32 local_ipaddr[4] = {};  	bool ipv4 = true; -	real_dev = rdma_vlan_dev_real_dev(netdev); -	if (!real_dev) -		real_dev = netdev; - -	ibdev = ib_device_get_by_netdev(real_dev, RDMA_DRIVER_IRDMA); -	if (!ibdev) -		return NOTIFY_DONE; - -	iwdev = to_iwdev(ibdev); -  	switch (event) {  	case NETEVENT_NEIGH_UPDATE: +		real_dev = rdma_vlan_dev_real_dev(netdev); +		if (!real_dev) +			real_dev = netdev; +		ibdev = ib_device_get_by_netdev(real_dev, RDMA_DRIVER_IRDMA); +		if (!ibdev) +			return NOTIFY_DONE; + +		iwdev = to_iwdev(ibdev);  		p = (__be32 *)neigh->primary_key;  		if (neigh->tbl->family == AF_INET6) {  			ipv4 = false; @@ -290,13 +288,12 @@ int irdma_net_event(struct notifier_block *notifier, unsigned long event,  			irdma_manage_arp_cache(iwdev->rf, neigh->ha,  					       local_ipaddr, ipv4,  					       IRDMA_ARP_DELETE); +		ib_device_put(ibdev);  		break;  	default:  		break;  	} -	ib_device_put(ibdev); -  	return NOTIFY_DONE;  }  | 
