if (info) {
                fl6->daddr = info->key.u.ipv6.dst;
                fl6->saddr = info->key.u.ipv6.src;
-               fl6->flowi6_tos = RT_TOS(info->key.tos);
-               fl6->flowlabel = info->key.label;
+               fl6->flowlabel = ip6_make_flowinfo(RT_TOS(info->key.tos),
+                                                  info->key.label);
                dst_cache = &info->dst_cache;
        } else {
                prio = geneve->tos;
                        use_cache = false;
                }
 
-               fl6->flowi6_tos = RT_TOS(prio);
-               fl6->flowlabel = geneve->label;
+               fl6->flowlabel = ip6_make_flowinfo(RT_TOS(prio),
+                                                  geneve->label);
                fl6->daddr = geneve->remote.sin6.sin6_addr;
                dst_cache = &geneve->dst_cache;
        }
                if (unlikely(err))
                        goto err;
 
-               prio = ip_tunnel_ecn_encap(fl6.flowi6_tos, iip, skb);
+               prio = ip_tunnel_ecn_encap(ip6_tclass(fl6.flowlabel),
+                                          iip, skb);
                ttl = geneve->ttl;
                if (!ttl && ipv6_addr_is_multicast(&fl6.daddr))
                        ttl = 1;