diff options
| author | David S. Miller <davem@davemloft.net> | 2011-03-02 17:31:35 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-03-02 17:31:35 -0500 |
| commit | b23dd4fe42b455af5c6e20966b7d6959fa8352ea (patch) | |
| tree | bf97323eae9a8d084170e573ff2c0c40bc72c3cd /net/l2tp | |
| parent | 452edd598f60522c11f7f88fdbab27eb36509d1a (diff) | |
ipv4: Make output route lookup return rtable directly.
Instead of on the stack.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/l2tp')
| -rw-r--r-- | net/l2tp/l2tp_ip.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c index 5381cebe516..2a698ff89db 100644 --- a/net/l2tp/l2tp_ip.c +++ b/net/l2tp/l2tp_ip.c | |||
| @@ -320,11 +320,12 @@ static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len | |||
| 320 | if (ipv4_is_multicast(lsa->l2tp_addr.s_addr)) | 320 | if (ipv4_is_multicast(lsa->l2tp_addr.s_addr)) |
| 321 | goto out; | 321 | goto out; |
| 322 | 322 | ||
| 323 | rc = ip_route_connect(&rt, lsa->l2tp_addr.s_addr, saddr, | 323 | rt = ip_route_connect(lsa->l2tp_addr.s_addr, saddr, |
| 324 | RT_CONN_FLAGS(sk), oif, | 324 | RT_CONN_FLAGS(sk), oif, |
| 325 | IPPROTO_L2TP, | 325 | IPPROTO_L2TP, |
| 326 | 0, 0, sk, true); | 326 | 0, 0, sk, true); |
| 327 | if (rc) { | 327 | if (IS_ERR(rt)) { |
| 328 | rc = PTR_ERR(rt); | ||
| 328 | if (rc == -ENETUNREACH) | 329 | if (rc == -ENETUNREACH) |
| 329 | IP_INC_STATS_BH(&init_net, IPSTATS_MIB_OUTNOROUTES); | 330 | IP_INC_STATS_BH(&init_net, IPSTATS_MIB_OUTNOROUTES); |
| 330 | goto out; | 331 | goto out; |
| @@ -489,7 +490,8 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m | |||
| 489 | * itself out. | 490 | * itself out. |
| 490 | */ | 491 | */ |
| 491 | security_sk_classify_flow(sk, &fl); | 492 | security_sk_classify_flow(sk, &fl); |
| 492 | if (ip_route_output_flow(sock_net(sk), &rt, &fl, sk)) | 493 | rt = ip_route_output_flow(sock_net(sk), &fl, sk); |
| 494 | if (IS_ERR(rt)) | ||
| 493 | goto no_route; | 495 | goto no_route; |
| 494 | } | 496 | } |
| 495 | sk_setup_caps(sk, &rt->dst); | 497 | sk_setup_caps(sk, &rt->dst); |
