diff options
Diffstat (limited to 'drivers/infiniband/core/addr.c')
-rw-r--r-- | drivers/infiniband/core/addr.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c index a5ea1bce9689..8aba0ba57de5 100644 --- a/drivers/infiniband/core/addr.c +++ b/drivers/infiniband/core/addr.c | |||
@@ -130,8 +130,8 @@ int rdma_translate_ip(struct sockaddr *addr, struct rdma_dev_addr *dev_addr) | |||
130 | 130 | ||
131 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) | 131 | #if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) |
132 | case AF_INET6: | 132 | case AF_INET6: |
133 | read_lock(&dev_base_lock); | 133 | rcu_read_lock(); |
134 | for_each_netdev(&init_net, dev) { | 134 | for_each_netdev_rcu(&init_net, dev) { |
135 | if (ipv6_chk_addr(&init_net, | 135 | if (ipv6_chk_addr(&init_net, |
136 | &((struct sockaddr_in6 *) addr)->sin6_addr, | 136 | &((struct sockaddr_in6 *) addr)->sin6_addr, |
137 | dev, 1)) { | 137 | dev, 1)) { |
@@ -139,7 +139,7 @@ int rdma_translate_ip(struct sockaddr *addr, struct rdma_dev_addr *dev_addr) | |||
139 | break; | 139 | break; |
140 | } | 140 | } |
141 | } | 141 | } |
142 | read_unlock(&dev_base_lock); | 142 | rcu_read_unlock(); |
143 | break; | 143 | break; |
144 | #endif | 144 | #endif |
145 | } | 145 | } |
@@ -200,7 +200,7 @@ static int addr4_resolve(struct sockaddr_in *src_in, | |||
200 | src_in->sin_family = AF_INET; | 200 | src_in->sin_family = AF_INET; |
201 | src_in->sin_addr.s_addr = rt->rt_src; | 201 | src_in->sin_addr.s_addr = rt->rt_src; |
202 | 202 | ||
203 | if (rt->idev->dev->flags & IFF_LOOPBACK) { | 203 | if (rt->dst.dev->flags & IFF_LOOPBACK) { |
204 | ret = rdma_translate_ip((struct sockaddr *) dst_in, addr); | 204 | ret = rdma_translate_ip((struct sockaddr *) dst_in, addr); |
205 | if (!ret) | 205 | if (!ret) |
206 | memcpy(addr->dst_dev_addr, addr->src_dev_addr, MAX_ADDR_LEN); | 206 | memcpy(addr->dst_dev_addr, addr->src_dev_addr, MAX_ADDR_LEN); |
@@ -208,12 +208,12 @@ static int addr4_resolve(struct sockaddr_in *src_in, | |||
208 | } | 208 | } |
209 | 209 | ||
210 | /* If the device does ARP internally, return 'done' */ | 210 | /* If the device does ARP internally, return 'done' */ |
211 | if (rt->idev->dev->flags & IFF_NOARP) { | 211 | if (rt->dst.dev->flags & IFF_NOARP) { |
212 | rdma_copy_addr(addr, rt->idev->dev, NULL); | 212 | rdma_copy_addr(addr, rt->dst.dev, NULL); |
213 | goto put; | 213 | goto put; |
214 | } | 214 | } |
215 | 215 | ||
216 | neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, rt->idev->dev); | 216 | neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, rt->dst.dev); |
217 | if (!neigh || !(neigh->nud_state & NUD_VALID)) { | 217 | if (!neigh || !(neigh->nud_state & NUD_VALID)) { |
218 | neigh_event_send(rt->dst.neighbour, NULL); | 218 | neigh_event_send(rt->dst.neighbour, NULL); |
219 | ret = -ENODATA; | 219 | ret = -ENODATA; |