ipv4: Don't use rt->rt_{src,dst} in ip_queue_xmit().
authorDavid S. Miller <davem@davemloft.net>
Sat, 7 May 2011 05:30:20 +0000 (22:30 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 8 May 2011 22:28:28 +0000 (15:28 -0700)
Now we can pick it out of the provided flow key.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/ip_output.c

index 14ee1e47720c522b5bb35cc2ff71aff0402acc48..b88ee5fdcbca1ac4147e93ade1aa9776d68d961c 100644 (file)
@@ -327,12 +327,12 @@ int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl)
         */
        rcu_read_lock();
        inet_opt = rcu_dereference(inet->inet_opt);
+       fl4 = &fl->u.ip4;
        rt = skb_rtable(skb);
        if (rt != NULL)
                goto packet_routed;
 
        /* Make sure we can route this packet. */
-       fl4 = &fl->u.ip4;
        rt = (struct rtable *)__sk_dst_check(sk, 0);
        if (rt == NULL) {
                __be32 daddr;
@@ -360,7 +360,7 @@ int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl)
        skb_dst_set_noref(skb, &rt->dst);
 
 packet_routed:
-       if (inet_opt && inet_opt->opt.is_strictroute && rt->rt_dst != rt->rt_gateway)
+       if (inet_opt && inet_opt->opt.is_strictroute && fl4->daddr != rt->rt_gateway)
                goto no_route;
 
        /* OK, we know where to send it, allocate and build IP header. */
@@ -374,8 +374,8 @@ packet_routed:
                iph->frag_off = 0;
        iph->ttl      = ip_select_ttl(inet, &rt->dst);
        iph->protocol = sk->sk_protocol;
-       iph->saddr    = rt->rt_src;
-       iph->daddr    = rt->rt_dst;
+       iph->saddr    = fl4->saddr;
+       iph->daddr    = fl4->daddr;
        /* Transport layer set skb->h.foo itself. */
 
        if (inet_opt && inet_opt->opt.optlen) {