diff options
author | David Miller <davem@davemloft.net> | 2012-01-24 08:16:03 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-01-25 21:30:37 -0500 |
commit | e55684fadbc5c9c69cad1b3bae228c8374b99b85 (patch) | |
tree | bd8ba497dda0da6697d9887f204005e6b474b468 /drivers/infiniband/hw | |
parent | 64b7007eb99b78cbdd6cca7a98e12794201b9725 (diff) |
infiniband: nes: Convert nes_addr_resolve_neigh() over to dst_neigh_lookup().
Now we must provide the IP destination address, and a reference has
to be dropped when we're done with the entry.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r-- | drivers/infiniband/hw/nes/nes_cm.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/nes/nes_cm.c b/drivers/infiniband/hw/nes/nes_cm.c index 425065b36b8..fc5192ee928 100644 --- a/drivers/infiniband/hw/nes/nes_cm.c +++ b/drivers/infiniband/hw/nes/nes_cm.c | |||
@@ -1348,8 +1348,9 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi | |||
1348 | else | 1348 | else |
1349 | netdev = nesvnic->netdev; | 1349 | netdev = nesvnic->netdev; |
1350 | 1350 | ||
1351 | neigh = dst_neigh_lookup(&rt->dst, &dst_ip); | ||
1352 | |||
1351 | rcu_read_lock(); | 1353 | rcu_read_lock(); |
1352 | neigh = dst_get_neighbour_noref(&rt->dst); | ||
1353 | if (neigh) { | 1354 | if (neigh) { |
1354 | if (neigh->nud_state & NUD_VALID) { | 1355 | if (neigh->nud_state & NUD_VALID) { |
1355 | nes_debug(NES_DBG_CM, "Neighbor MAC address for 0x%08X" | 1356 | nes_debug(NES_DBG_CM, "Neighbor MAC address for 0x%08X" |
@@ -1360,8 +1361,7 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi | |||
1360 | if (!memcmp(nesadapter->arp_table[arpindex].mac_addr, | 1361 | if (!memcmp(nesadapter->arp_table[arpindex].mac_addr, |
1361 | neigh->ha, ETH_ALEN)) { | 1362 | neigh->ha, ETH_ALEN)) { |
1362 | /* Mac address same as in nes_arp_table */ | 1363 | /* Mac address same as in nes_arp_table */ |
1363 | ip_rt_put(rt); | 1364 | goto out; |
1364 | return rc; | ||
1365 | } | 1365 | } |
1366 | 1366 | ||
1367 | nes_manage_arp_cache(nesvnic->netdev, | 1367 | nes_manage_arp_cache(nesvnic->netdev, |
@@ -1377,7 +1377,12 @@ static int nes_addr_resolve_neigh(struct nes_vnic *nesvnic, u32 dst_ip, int arpi | |||
1377 | neigh_event_send(neigh, NULL); | 1377 | neigh_event_send(neigh, NULL); |
1378 | } | 1378 | } |
1379 | } | 1379 | } |
1380 | out: | ||
1380 | rcu_read_unlock(); | 1381 | rcu_read_unlock(); |
1382 | |||
1383 | if (neigh) | ||
1384 | neigh_release(neigh); | ||
1385 | |||
1381 | ip_rt_put(rt); | 1386 | ip_rt_put(rt); |
1382 | return rc; | 1387 | return rc; |
1383 | } | 1388 | } |