From: Xin Long <[email protected]>
Date: Thu, 26 Oct 2017 19:27:17 +0800

> 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: c12b395a4664 ("gre: Support GRE over IPv6")
> Reported-by: Jianlin Shi <[email protected]>
> Signed-off-by: Xin Long <[email protected]>

Applied and queued up for -stable.

Thanks.

Reply via email to