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 /net/ipv4/inet_connection_sock.c | |
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 'net/ipv4/inet_connection_sock.c')
-rw-r--r-- | net/ipv4/inet_connection_sock.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 97e5fb765265..6c0b7f4a3d7d 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c | |||
@@ -356,20 +356,23 @@ struct dst_entry *inet_csk_route_req(struct sock *sk, | |||
356 | struct rtable *rt; | 356 | struct rtable *rt; |
357 | const struct inet_request_sock *ireq = inet_rsk(req); | 357 | const struct inet_request_sock *ireq = inet_rsk(req); |
358 | struct ip_options *opt = inet_rsk(req)->opt; | 358 | struct ip_options *opt = inet_rsk(req)->opt; |
359 | struct flowi fl = { .oif = sk->sk_bound_dev_if, | 359 | struct flowi4 fl4 = { |
360 | .mark = sk->sk_mark, | 360 | .flowi4_oif = sk->sk_bound_dev_if, |
361 | .fl4_dst = ((opt && opt->srr) ? | 361 | .flowi4_mark = sk->sk_mark, |
362 | opt->faddr : ireq->rmt_addr), | 362 | .daddr = ((opt && opt->srr) ? |
363 | .fl4_src = ireq->loc_addr, | 363 | opt->faddr : ireq->rmt_addr), |
364 | .fl4_tos = RT_CONN_FLAGS(sk), | 364 | .saddr = ireq->loc_addr, |
365 | .proto = sk->sk_protocol, | 365 | .flowi4_tos = RT_CONN_FLAGS(sk), |
366 | .flags = inet_sk_flowi_flags(sk), | 366 | .flowi4_proto = sk->sk_protocol, |
367 | .fl_ip_sport = inet_sk(sk)->inet_sport, | 367 | .flowi4_flags = inet_sk_flowi_flags(sk), |
368 | .fl_ip_dport = ireq->rmt_port }; | 368 | .fl4_sport = inet_sk(sk)->inet_sport, |
369 | .fl4_dport = ireq->rmt_port, | ||
370 | }; | ||
369 | struct net *net = sock_net(sk); | 371 | struct net *net = sock_net(sk); |
370 | 372 | ||
371 | security_req_classify_flow(req, &fl); | 373 | security_req_classify_flow(req, flowi4_to_flowi(&fl4)); |
372 | if (ip_route_output_flow(net, &rt, &fl, sk, 0)) | 374 | rt = ip_route_output_flow(net, &fl4, sk); |
375 | if (IS_ERR(rt)) | ||
373 | goto no_route; | 376 | goto no_route; |
374 | if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway) | 377 | if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway) |
375 | goto route_err; | 378 | goto route_err; |