diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-16 19:29:25 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-16 19:29:25 -0400 |
commit | 7a6362800cb7d1d618a697a650c7aaed3eb39320 (patch) | |
tree | 087f9bc6c13ef1fad4b392c5cf9325cd28fa8523 /drivers/infiniband/core | |
parent | 6445ced8670f37cfc2c5e24a9de9b413dbfc788d (diff) | |
parent | ceda86a108671294052cbf51660097b6534672f5 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1480 commits)
bonding: enable netpoll without checking link status
xfrm: Refcount destination entry on xfrm_lookup
net: introduce rx_handler results and logic around that
bonding: get rid of IFF_SLAVE_INACTIVE netdev->priv_flag
bonding: wrap slave state work
net: get rid of multiple bond-related netdevice->priv_flags
bonding: register slave pointer for rx_handler
be2net: Bump up the version number
be2net: Copyright notice change. Update to Emulex instead of ServerEngines
e1000e: fix kconfig for crc32 dependency
netfilter ebtables: fix xt_AUDIT to work with ebtables
xen network backend driver
bonding: Improve syslog message at device creation time
bonding: Call netif_carrier_off after register_netdevice
bonding: Incorrect TX queue offset
net_sched: fix ip_tos2prio
xfrm: fix __xfrm_route_forward()
be2net: Fix UDP packet detected status in RX compl
Phonet: fix aligned-mode pipe socket buffer header reserve
netxen: support for GbE port settings
...
Fix up conflicts in drivers/staging/brcm80211/brcmsmac/wl_mac80211.c
with the staging updates.
Diffstat (limited to 'drivers/infiniband/core')
-rw-r--r-- | drivers/infiniband/core/addr.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c index 8aba0ba57de5..e0ef5fdc361e 100644 --- a/drivers/infiniband/core/addr.c +++ b/drivers/infiniband/core/addr.c | |||
@@ -183,20 +183,15 @@ static int addr4_resolve(struct sockaddr_in *src_in, | |||
183 | { | 183 | { |
184 | __be32 src_ip = src_in->sin_addr.s_addr; | 184 | __be32 src_ip = src_in->sin_addr.s_addr; |
185 | __be32 dst_ip = dst_in->sin_addr.s_addr; | 185 | __be32 dst_ip = dst_in->sin_addr.s_addr; |
186 | struct flowi fl; | ||
187 | struct rtable *rt; | 186 | struct rtable *rt; |
188 | struct neighbour *neigh; | 187 | struct neighbour *neigh; |
189 | int ret; | 188 | int ret; |
190 | 189 | ||
191 | memset(&fl, 0, sizeof fl); | 190 | rt = ip_route_output(&init_net, dst_ip, src_ip, 0, addr->bound_dev_if); |
192 | fl.nl_u.ip4_u.daddr = dst_ip; | 191 | if (IS_ERR(rt)) { |
193 | fl.nl_u.ip4_u.saddr = src_ip; | 192 | ret = PTR_ERR(rt); |
194 | fl.oif = addr->bound_dev_if; | ||
195 | |||
196 | ret = ip_route_output_key(&init_net, &rt, &fl); | ||
197 | if (ret) | ||
198 | goto out; | 193 | goto out; |
199 | 194 | } | |
200 | src_in->sin_family = AF_INET; | 195 | src_in->sin_family = AF_INET; |
201 | src_in->sin_addr.s_addr = rt->rt_src; | 196 | src_in->sin_addr.s_addr = rt->rt_src; |
202 | 197 | ||
@@ -236,28 +231,28 @@ static int addr6_resolve(struct sockaddr_in6 *src_in, | |||
236 | struct sockaddr_in6 *dst_in, | 231 | struct sockaddr_in6 *dst_in, |
237 | struct rdma_dev_addr *addr) | 232 | struct rdma_dev_addr *addr) |
238 | { | 233 | { |
239 | struct flowi fl; | 234 | struct flowi6 fl6; |
240 | struct neighbour *neigh; | 235 | struct neighbour *neigh; |
241 | struct dst_entry *dst; | 236 | struct dst_entry *dst; |
242 | int ret; | 237 | int ret; |
243 | 238 | ||
244 | memset(&fl, 0, sizeof fl); | 239 | memset(&fl6, 0, sizeof fl6); |
245 | ipv6_addr_copy(&fl.fl6_dst, &dst_in->sin6_addr); | 240 | ipv6_addr_copy(&fl6.daddr, &dst_in->sin6_addr); |
246 | ipv6_addr_copy(&fl.fl6_src, &src_in->sin6_addr); | 241 | ipv6_addr_copy(&fl6.saddr, &src_in->sin6_addr); |
247 | fl.oif = addr->bound_dev_if; | 242 | fl6.flowi6_oif = addr->bound_dev_if; |
248 | 243 | ||
249 | dst = ip6_route_output(&init_net, NULL, &fl); | 244 | dst = ip6_route_output(&init_net, NULL, &fl6); |
250 | if ((ret = dst->error)) | 245 | if ((ret = dst->error)) |
251 | goto put; | 246 | goto put; |
252 | 247 | ||
253 | if (ipv6_addr_any(&fl.fl6_src)) { | 248 | if (ipv6_addr_any(&fl6.saddr)) { |
254 | ret = ipv6_dev_get_saddr(&init_net, ip6_dst_idev(dst)->dev, | 249 | ret = ipv6_dev_get_saddr(&init_net, ip6_dst_idev(dst)->dev, |
255 | &fl.fl6_dst, 0, &fl.fl6_src); | 250 | &fl6.daddr, 0, &fl6.saddr); |
256 | if (ret) | 251 | if (ret) |
257 | goto put; | 252 | goto put; |
258 | 253 | ||
259 | src_in->sin6_family = AF_INET6; | 254 | src_in->sin6_family = AF_INET6; |
260 | ipv6_addr_copy(&src_in->sin6_addr, &fl.fl6_src); | 255 | ipv6_addr_copy(&src_in->sin6_addr, &fl6.saddr); |
261 | } | 256 | } |
262 | 257 | ||
263 | if (dst->dev->flags & IFF_LOOPBACK) { | 258 | if (dst->dev->flags & IFF_LOOPBACK) { |