diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c index 13b1748b8b46..70ef4d4ebff4 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c @@ -1153,16 +1153,14 @@ static void ip6gre_tnl_link_config_route(struct ip6_tnl *t, int set_mtu, dev->needed_headroom = dst_len; if (set_mtu) { - int mtu = rt->dst.dev->mtu - t_hlen; - + dev->mtu = rt->dst.dev->mtu - t_hlen; if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT)) - mtu -= 8; + dev->mtu -= 8; if (dev->type == ARPHRD_ETHER) - mtu -= ETH_HLEN; + dev->mtu -= ETH_HLEN; - if (mtu < IPV6_MIN_MTU) - mtu = IPV6_MIN_MTU; - WRITE_ONCE(dev->mtu, mtu); + if (dev->mtu < IPV6_MIN_MTU) + dev->mtu = IPV6_MIN_MTU; } } ip6_rt_put(rt); diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index ea5077942871..fa8da8ff35b4 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c @@ -1446,8 +1446,8 @@ static void ip6_tnl_link_config(struct ip6_tnl *t) struct net_device *tdev = NULL; struct __ip6_tnl_parm *p = &t->parms; struct flowi6 *fl6 = &t->fl.u.ip6; + unsigned int mtu; int t_hlen; - int mtu; memcpy(dev->dev_addr, &p->laddr, sizeof(struct in6_addr)); memcpy(dev->broadcast, &p->raddr, sizeof(struct in6_addr)); @@ -1494,13 +1494,12 @@ static void ip6_tnl_link_config(struct ip6_tnl *t) dev->hard_header_len = tdev->hard_header_len + t_hlen; mtu = min_t(unsigned int, tdev->mtu, IP6_MAX_MTU); - mtu = mtu - t_hlen; + dev->mtu = mtu - t_hlen; if (!(t->parms.flags & IP6_TNL_F_IGN_ENCAP_LIMIT)) - mtu -= 8; + dev->mtu -= 8; - if (mtu < IPV6_MIN_MTU) - mtu = IPV6_MIN_MTU; - WRITE_ONCE(dev->mtu, mtu); + if (dev->mtu < IPV6_MIN_MTU) + dev->mtu = IPV6_MIN_MTU; } } } diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index 946871741f12..637cd99bd7a6 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c @@ -1130,12 +1130,10 @@ static void ipip6_tunnel_bind_dev(struct net_device *dev) if (tdev && !netif_is_l3_master(tdev)) { int t_hlen = tunnel->hlen + sizeof(struct iphdr); - int mtu; - mtu = tdev->mtu - t_hlen; - if (mtu < IPV6_MIN_MTU) - mtu = IPV6_MIN_MTU; - WRITE_ONCE(dev->mtu, mtu); + dev->mtu = tdev->mtu - t_hlen; + if (dev->mtu < IPV6_MIN_MTU) + dev->mtu = IPV6_MIN_MTU; } }