Xin Long
8aec4959d8
ip6_gre: update dst pmtu if dev mtu has been updated by toobig in __gre6_xmit
...
When receiving a Toobig icmpv6 packet, ip6gre_err would just set
tunnel dev's mtu, that's not enough. For skb_dst(skb)'s pmtu may
still be using the old value, it has no chance to be updated with
tunnel dev's mtu.
Jianlin found this issue by reducing route's mtu while running
netperf, the performance went to 0.
ip6ip6 and ip4ip6 tunnel can work well with this, as they lookup
the upper dst and update_pmtu it's pmtu or icmpv6_send a Toobig
to upper socket after setting tunnel dev's mtu.
We couldn't do that for ip6_gre, as gre's inner packet could be
any protocol, it's difficult to handle them (like lookup upper
dst) in a good way.
So this patch is to fix it by updating skb_dst(skb)'s pmtu when
dev->mtu < skb_dst(skb)'s pmtu in tx path. It's safe to do this
update there, as usually dev->mtu <= skb_dst(skb)'s pmtu and no
performance regression can be caused by this.
Fixes: c12b395a46 ("gre: Support GRE over IPv6")
Reported-by: Jianlin Shi <jishi@redhat.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-10-27 23:45:42 +09:00
..
ila
netfilter: nf_hook_ops structs can be const
2017-07-31 19:10:44 +02:00
netfilter
netfilter: SYNPROXY: skip non-tcp packet in {ipv4, ipv6}_synproxy_hook
2017-10-09 13:08:39 +02:00
addrconf.c
ipv6: fix net.ipv6.conf.all.accept_dad behaviour for real
2017-10-07 23:10:05 +01:00
addrconf_core.c
addrlabel.c
addrlabel: add/delete/get can run without rtnl
2017-08-29 09:41:56 -07:00
af_inet6.c
ipv6: Add sysctl for per namespace flow label reflection
2017-08-24 18:05:43 -07:00
ah6.c
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec-next
2017-06-23 14:17:31 -04:00
anycast.c
net, ipv6: convert ifacaddr6.aca_refcnt from atomic_t to refcount_t
2017-07-04 01:29:04 -07:00
calipso.c
net, calipso: convert calipso_doi.refcount from atomic_t to refcount_t
2017-07-04 22:35:16 +01:00
datagram.c
net: convert sock.sk_refcnt from atomic_t to refcount_t
2017-07-01 07:39:08 -07:00
esp6.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2017-09-01 17:42:05 -07:00
esp6_offload.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2017-09-01 17:42:05 -07:00
exthdrs.c
ipv6: sr: allow SRH insertion with arbitrary segments_left value
2017-08-07 14:16:21 -07:00
exthdrs_core.c
exthdrs_offload.c
fib6_notifier.c
net: Add module reference to FIB notifiers
2017-09-01 20:33:42 -07:00
fib6_rules.c
net: ipv6: avoid overhead when no custom FIB rules are installed
2017-08-08 21:40:08 -07:00
fou6.c
icmp.c
ipv6: Use rt6i_idev index for echo replies to a local address
2017-08-29 15:32:25 -07:00
inet6_connection_sock.c
inet6_hashtables.c
net: ipv6: add second dif to inet6 socket lookups
2017-08-07 11:39:22 -07:00
ip6_checksum.c
ip6_fib.c
ipv6: fix typo in fib6_net_exit()
2017-09-08 16:09:04 -07:00
ip6_flowlabel.c
ipv6: flowlabel: do not leave opt->tot_len with garbage
2017-10-22 03:22:24 +01:00
ip6_gre.c
ip6_gre: update dst pmtu if dev mtu has been updated by toobig in __gre6_xmit
2017-10-27 23:45:42 +09:00
ip6_icmp.c
ip6_input.c
ip6_offload.c
gso: fix payload length when gso_size is zero
2017-10-08 10:12:15 -07:00
ip6_offload.h
ip6_output.c
ipv6: flowlabel: do not leave opt->tot_len with garbage
2017-10-22 03:22:24 +01:00
ip6_tunnel.c
ip6_tunnel: update mtu properly for ARPHRD_ETHER tunnel device in tx path
2017-10-01 03:46:42 +01:00
ip6_udp_tunnel.c
ip6_vti.c
vti: fix use after free in vti_tunnel_xmit/vti6_tnl_xmit
2017-09-26 09:58:21 -07:00
ip6mr.c
rtnetlink: make rtnl_register accept a flags parameter
2017-08-09 16:57:38 -07:00
ipcomp6.c
ipv6_sockglue.c
ipv6: do not set sk_destruct in IPV6_ADDRFORM sockopt
2017-08-29 10:54:40 -07:00
Kconfig
ipv6: sr: add helper functions for seg6local
2017-08-25 17:10:24 -07:00
Makefile
ipv6: sr: define core operations for seg6local lightweight tunnel
2017-08-07 14:16:22 -07:00
mcast.c
net, ipv6: convert ifmcaddr6.mca_refcnt from atomic_t to refcount_t
2017-07-04 01:29:04 -07:00
mcast_snoop.c
mip6.c
ndisc.c
neigh: increase queue_len_bytes to match wmem_default
2017-08-29 16:10:50 -07:00
netfilter.c
output_core.c
ipv6: accept 64k - 1 packet length in ip6_find_1stfragopt()
2017-08-22 10:23:26 -07:00
ping.c
proc.c
proc: snmp6: Use correct type in memset
2017-06-12 09:53:14 -04:00
protocol.c
raw.c
net: ipv6: add second dif to raw socket lookups
2017-08-07 11:39:22 -07:00
reassembly.c
Revert "net: fix percpu memory leaks"
2017-09-03 11:01:05 -07:00
route.c
ipv6: Fix traffic triggered IPsec connections.
2017-10-09 09:39:26 -07:00
seg6.c
ipv6: sr: define core operations for seg6local lightweight tunnel
2017-08-07 14:16:22 -07:00
seg6_hmac.c
ipv6: sr: Use ARRAY_SIZE macro
2017-09-01 18:35:23 -07:00
seg6_iptunnel.c
ipv6: sr: add support for encapsulation of L2 frames
2017-08-25 17:10:23 -07:00
seg6_local.c
ipv6: sr: remove duplicate routing header type check
2017-09-11 14:34:10 -07:00
sit.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2017-06-30 12:43:08 -04:00
syncookies.c
ipv4: ipv6: initialize treq->txhash in cookie_v[46]_check()
2017-07-18 11:22:51 -07:00
sysctl_net_ipv6.c
ipv6: Add sysctl for per namespace flow label reflection
2017-08-24 18:05:43 -07:00
tcp_ipv6.c
tcp: fix a request socket leak
2017-09-08 16:07:17 -07:00
tcpv6_offload.c
tunnel6.c
udp.c
udpv6: Fix the checksum computation when HW checksum does not apply
2017-09-18 11:43:03 -07:00
udp_impl.h
udp_offload.c
net: avoid skb_warn_bad_offload false positives on UFO
2017-08-08 21:39:01 -07:00
udplite.c
xfrm6_input.c
xfrm6: Fix CHECKSUM_COMPLETE after IPv6 header push
2017-08-02 11:00:15 +02:00
xfrm6_mode_beet.c
networking: make skb_pull & friends return void pointers
2017-06-16 11:48:39 -04:00
xfrm6_mode_ro.c
xfrm6_mode_transport.c
xfrm6_mode_tunnel.c
xfrm6_output.c
xfrm6_policy.c
net: xfrm: support setting an output mark.
2017-08-11 07:03:00 +02:00
xfrm6_protocol.c
xfrm6_state.c
xfrm6_tunnel.c
net, ipv6: convert xfrm6_tunnel_spi.refcnt from atomic_t to refcount_t
2017-07-04 01:29:04 -07:00