Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

inet: Kill FLOWI_FLAG_PRECOW_METRICS.

No longer needed. TCP writes metrics, but now in it's own special
cache that does not dirty the route metrics. Therefore there is no
longer any reason to pre-cow metrics in this way.

Signed-off-by: David S. Miller <davem@davemloft.net>

+6 -18
+2 -3
include/net/flow.h
··· 20 20 __u8 flowic_proto; 21 21 __u8 flowic_flags; 22 22 #define FLOWI_FLAG_ANYSRC 0x01 23 - #define FLOWI_FLAG_PRECOW_METRICS 0x02 24 - #define FLOWI_FLAG_CAN_SLEEP 0x04 25 - #define FLOWI_FLAG_RT_NOCACHE 0x08 23 + #define FLOWI_FLAG_CAN_SLEEP 0x02 24 + #define FLOWI_FLAG_RT_NOCACHE 0x04 26 25 __u32 flowic_secid; 27 26 }; 28 27
-2
include/net/inet_sock.h
··· 245 245 246 246 if (inet_sk(sk)->transparent || inet_sk(sk)->hdrincl) 247 247 flags |= FLOWI_FLAG_ANYSRC; 248 - if (sk->sk_protocol == IPPROTO_TCP) 249 - flags |= FLOWI_FLAG_PRECOW_METRICS; 250 248 return flags; 251 249 } 252 250
-2
include/net/route.h
··· 278 278 279 279 if (inet_sk(sk)->transparent) 280 280 flow_flags |= FLOWI_FLAG_ANYSRC; 281 - if (protocol == IPPROTO_TCP) 282 - flow_flags |= FLOWI_FLAG_PRECOW_METRICS; 283 281 if (can_sleep) 284 282 flow_flags |= FLOWI_FLAG_CAN_SLEEP; 285 283
+1 -1
net/ipv4/inet_connection_sock.c
··· 375 375 const struct inet_request_sock *ireq = inet_rsk(req); 376 376 struct ip_options_rcu *opt = inet_rsk(req)->opt; 377 377 struct net *net = sock_net(sk); 378 - int flags = inet_sk_flowi_flags(sk) & ~FLOWI_FLAG_PRECOW_METRICS; 378 + int flags = inet_sk_flowi_flags(sk); 379 379 380 380 if (nocache) 381 381 flags |= FLOWI_FLAG_RT_NOCACHE;
+2 -9
net/ipv4/route.c
··· 1658 1658 struct rtable *rt; 1659 1659 1660 1660 flowi4_init_output(&fl4, oif, mark, RT_TOS(iph->tos), RT_SCOPE_UNIVERSE, 1661 - protocol, flow_flags | FLOWI_FLAG_PRECOW_METRICS, 1661 + protocol, flow_flags, 1662 1662 iph->daddr, iph->saddr, 0, 0); 1663 1663 rt = __ip_route_output_key(net, &fl4); 1664 1664 if (!IS_ERR(rt)) { ··· 1836 1836 { 1837 1837 struct inet_peer_base *base; 1838 1838 struct inet_peer *peer; 1839 - int create = 0; 1840 - 1841 - /* If a peer entry exists for this destination, we must hook 1842 - * it up in order to get at cached metrics. 1843 - */ 1844 - if (fl4 && (fl4->flowi4_flags & FLOWI_FLAG_PRECOW_METRICS)) 1845 - create = 1; 1846 1839 1847 1840 base = inetpeer_base_ptr(rt->_peer); 1848 1841 BUG_ON(!base); 1849 1842 1850 - peer = inet_getpeer_v4(base, rt->rt_dst, create); 1843 + peer = inet_getpeer_v4(base, rt->rt_dst, 0); 1851 1844 if (peer) { 1852 1845 __rt_set_peer(rt, peer); 1853 1846 rt->rt_peer_genid = rt_peer_genid();
+1 -1
net/ipv6/route.c
··· 1093 1093 memset(&fl6, 0, sizeof(fl6)); 1094 1094 fl6.flowi6_oif = oif; 1095 1095 fl6.flowi6_mark = mark; 1096 - fl6.flowi6_flags = FLOWI_FLAG_PRECOW_METRICS; 1096 + fl6.flowi6_flags = 0; 1097 1097 fl6.daddr = iph->daddr; 1098 1098 fl6.saddr = iph->saddr; 1099 1099 fl6.flowlabel = (*(__be32 *) iph) & IPV6_FLOWINFO_MASK;