X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=net%2Fl2tp%2Fl2tp_ip.c;h=61d8b75d2686c0272a1618887c08c34de2b4abe5;hb=72ea1f74fcdf874cca6d2c0962379523bbd99e2c;hp=70614e7affabded003aef1bf5ed4c097d4b515fa;hpb=6d407cfaf5a56b3030b9e55d0f542601e173c5d2;p=~andy%2Flinux diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c index 70614e7affa..61d8b75d268 100644 --- a/net/l2tp/l2tp_ip.c +++ b/net/l2tp/l2tp_ip.c @@ -464,10 +464,12 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m sk->sk_bound_dev_if); if (IS_ERR(rt)) goto no_route; - if (connected) + if (connected) { sk_setup_caps(sk, &rt->dst); - else - dst_release(&rt->dst); /* safe since we hold rcu_read_lock */ + } else { + skb_dst_set(skb, &rt->dst); + goto xmit; + } } /* We dont need to clone dst here, it is guaranteed to not disappear. @@ -475,6 +477,7 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m */ skb_dst_set_noref(skb, &rt->dst); +xmit: /* Queue the packet to IP for output */ rc = ip_queue_xmit(skb, &inet->cork.fl); rcu_read_unlock();