#endif
        rth->dst.output = ip_rt_bug;
 
-       rth->rt_key_dst = daddr;
-       rth->rt_key_src = saddr;
        rth->rt_genid   = rt_genid(dev_net(dev));
        rth->rt_flags   = RTCF_MULTICAST;
        rth->rt_type    = RTN_MULTICAST;
-       rth->rt_key_tos = tos;
        rth->rt_dst     = daddr;
        rth->rt_src     = saddr;
        rth->rt_route_iif = dev->ifindex;
                goto cleanup;
        }
 
-       rth->rt_key_dst = daddr;
-       rth->rt_key_src = saddr;
        rth->rt_genid = rt_genid(dev_net(rth->dst.dev));
        rth->rt_flags = flags;
        rth->rt_type = res->type;
-       rth->rt_key_tos = tos;
        rth->rt_dst     = daddr;
        rth->rt_src     = saddr;
        rth->rt_route_iif = in_dev->dev->ifindex;
        rth->dst.tclassid = itag;
 #endif
 
-       rth->rt_key_dst = daddr;
-       rth->rt_key_src = saddr;
        rth->rt_genid = rt_genid(net);
        rth->rt_flags   = flags|RTCF_LOCAL;
        rth->rt_type    = res.type;
-       rth->rt_key_tos = tos;
        rth->rt_dst     = daddr;
        rth->rt_src     = saddr;
        rth->rt_route_iif = dev->ifindex;
 
 /* called with rcu_read_lock() */
 static struct rtable *__mkroute_output(const struct fib_result *res,
-                                      const struct flowi4 *fl4,
-                                      __be32 orig_daddr, __be32 orig_saddr,
-                                      int orig_oif, __u8 orig_rtos,
+                                      const struct flowi4 *fl4, int orig_oif,
                                       struct net_device *dev_out,
                                       unsigned int flags)
 {
 
        rth->dst.output = ip_output;
 
-       rth->rt_key_dst = orig_daddr;
-       rth->rt_key_src = orig_saddr;
        rth->rt_genid = rt_genid(dev_net(dev_out));
        rth->rt_flags   = flags;
        rth->rt_type    = type;
-       rth->rt_key_tos = orig_rtos;
        rth->rt_dst     = fl4->daddr;
        rth->rt_src     = fl4->saddr;
        rth->rt_route_iif = 0;
        unsigned int flags = 0;
        struct fib_result res;
        struct rtable *rth;
-       __be32 orig_daddr;
-       __be32 orig_saddr;
        int orig_oif;
 
        res.tclassid    = 0;
        res.fi          = NULL;
        res.table       = NULL;
 
-       orig_daddr = fl4->daddr;
-       orig_saddr = fl4->saddr;
        orig_oif = fl4->flowi4_oif;
 
        fl4->flowi4_iif = net->loopback_dev->ifindex;
 
 
 make_route:
-       rth = __mkroute_output(&res, fl4, orig_daddr, orig_saddr, orig_oif,
-                              tos, dev_out, flags);
+       rth = __mkroute_output(&res, fl4, orig_oif, dev_out, flags);
 
 out:
        rcu_read_unlock();
                if (new->dev)
                        dev_hold(new->dev);
 
-               rt->rt_key_dst = ort->rt_key_dst;
-               rt->rt_key_src = ort->rt_key_src;
-               rt->rt_key_tos = ort->rt_key_tos;
                rt->rt_route_iif = ort->rt_route_iif;
                rt->rt_iif = ort->rt_iif;
                rt->rt_oif = ort->rt_oif;
 }
 EXPORT_SYMBOL_GPL(ip_route_output_flow);
 
-static int rt_fill_info(struct net *net,
+static int rt_fill_info(struct net *net,  __be32 src, u8 tos,
                        struct sk_buff *skb, u32 pid, u32 seq, int event,
                        int nowait, unsigned int flags)
 {
        r->rtm_family    = AF_INET;
        r->rtm_dst_len  = 32;
        r->rtm_src_len  = 0;
-       r->rtm_tos      = rt->rt_key_tos;
+       r->rtm_tos      = tos;
        r->rtm_table    = RT_TABLE_MAIN;
        if (nla_put_u32(skb, RTA_TABLE, RT_TABLE_MAIN))
                goto nla_put_failure;
 
        if (nla_put_be32(skb, RTA_DST, rt->rt_dst))
                goto nla_put_failure;
-       if (rt->rt_key_src) {
+       if (src) {
                r->rtm_src_len = 32;
-               if (nla_put_be32(skb, RTA_SRC, rt->rt_key_src))
+               if (nla_put_be32(skb, RTA_SRC, src))
                        goto nla_put_failure;
        }
        if (rt->dst.dev &&
                goto nla_put_failure;
 #endif
        if (!rt_is_input_route(rt) &&
-           rt->rt_src != rt->rt_key_src) {
+           rt->rt_src != src) {
                if (nla_put_be32(skb, RTA_PREFSRC, rt->rt_src))
                        goto nla_put_failure;
        }
        if (rtm->rtm_flags & RTM_F_NOTIFY)
                rt->rt_flags |= RTCF_NOTIFY;
 
-       err = rt_fill_info(net, skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq,
+       err = rt_fill_info(net, src, rtm->rtm_tos, skb,
+                          NETLINK_CB(in_skb).pid, nlh->nlmsg_seq,
                           RTM_NEWROUTE, 0, 0);
        if (err <= 0)
                goto errout_free;