EXPORT_SYMBOL_GPL(inet6_csk_bind_conflict);
 
 struct dst_entry *inet6_csk_route_req(struct sock *sk,
+                                     struct flowi6 *fl6,
                                      const struct request_sock *req)
 {
        struct inet6_request_sock *treq = inet6_rsk(req);
        struct ipv6_pinfo *np = inet6_sk(sk);
        struct in6_addr *final_p, final;
        struct dst_entry *dst;
-       struct flowi6 fl6;
-
-       memset(&fl6, 0, sizeof(fl6));
-       fl6.flowi6_proto = IPPROTO_TCP;
-       fl6.daddr = treq->rmt_addr;
-       final_p = fl6_update_dst(&fl6, np->opt, &final);
-       fl6.saddr = treq->loc_addr;
-       fl6.flowi6_oif = treq->iif;
-       fl6.flowi6_mark = sk->sk_mark;
-       fl6.fl6_dport = inet_rsk(req)->rmt_port;
-       fl6.fl6_sport = inet_rsk(req)->loc_port;
-       security_req_classify_flow(req, flowi6_to_flowi(&fl6));
 
-       dst = ip6_dst_lookup_flow(sk, &fl6, final_p, false);
+       memset(fl6, 0, sizeof(*fl6));
+       fl6->flowi6_proto = IPPROTO_TCP;
+       fl6->daddr = treq->rmt_addr;
+       final_p = fl6_update_dst(fl6, np->opt, &final);
+       fl6->saddr = treq->loc_addr;
+       fl6->flowi6_oif = treq->iif;
+       fl6->flowi6_mark = sk->sk_mark;
+       fl6->fl6_dport = inet_rsk(req)->rmt_port;
+       fl6->fl6_sport = inet_rsk(req)->loc_port;
+       security_req_classify_flow(req, flowi6_to_flowi(fl6));
+
+       dst = ip6_dst_lookup_flow(sk, fl6, final_p, false);
        if (IS_ERR(dst))
                return NULL;
 
 
 }
 
 
-static int tcp_v6_send_synack(struct sock *sk, struct request_sock *req,
+static int tcp_v6_send_synack(struct sock *sk,
+                             struct request_sock *req,
                              struct request_values *rvp,
                              u16 queue_mapping)
 {
        struct tcp_sock *tp = tcp_sk(sk);
        __u32 isn = TCP_SKB_CB(skb)->when;
        struct dst_entry *dst = NULL;
+       struct flowi6 fl6;
        bool want_cookie = false;
 
        if (skb->protocol == htons(ETH_P_IP))
                 */
                if (tmp_opt.saw_tstamp &&
                    tcp_death_row.sysctl_tw_recycle &&
-                   (dst = inet6_csk_route_req(sk, req)) != NULL &&
+                   (dst = inet6_csk_route_req(sk, &fl6, req)) != NULL &&
                    (peer = rt6_get_peer((struct rt6_info *)dst)) != NULL &&
                    ipv6_addr_equal((struct in6_addr *)peer->daddr.addr.a6,
                                    &treq->rmt_addr)) {
 #ifdef CONFIG_TCP_MD5SIG
        struct tcp_md5sig_key *key;
 #endif
+       struct flowi6 fl6;
 
        if (skb->protocol == htons(ETH_P_IP)) {
                /*
                goto out_overflow;
 
        if (!dst) {
-               dst = inet6_csk_route_req(sk, req);
+               dst = inet6_csk_route_req(sk, &fl6, req);
                if (!dst)
                        goto out;
        }