net: annotate writes on dev->mtu from ndo_change_mtu()
authorEric Dumazet <edumazet@google.com>
Mon, 6 May 2024 10:28:12 +0000 (10:28 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 7 May 2024 23:19:14 +0000 (16:19 -0700)
Simon reported that ndo_change_mtu() methods were never
updated to use WRITE_ONCE(dev->mtu, new_mtu) as hinted
in commit 501a90c94510 ("inet: protect against too small
mtu values.")

We read dev->mtu without holding RTNL in many places,
with READ_ONCE() annotations.

It is time to take care of ndo_change_mtu() methods
to use corresponding WRITE_ONCE()

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Simon Horman <horms@kernel.org>
Closes: https://lore.kernel.org/netdev/20240505144608.GB67882@kernel.org/
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
Reviewed-by: Simon Horman <horms@kernel.org>
Acked-by: Shannon Nelson <shannon.nelson@amd.com>
Link: https://lore.kernel.org/r/20240506102812.3025432-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
153 files changed:
drivers/infiniband/ulp/ipoib/ipoib_main.c
drivers/net/bonding/bond_main.c
drivers/net/can/dev/dev.c
drivers/net/can/vcan.c
drivers/net/can/vxcan.c
drivers/net/ethernet/agere/et131x.c
drivers/net/ethernet/alteon/acenic.c
drivers/net/ethernet/altera/altera_tse_main.c
drivers/net/ethernet/amazon/ena/ena_netdev.c
drivers/net/ethernet/amd/amd8111e.c
drivers/net/ethernet/amd/xgbe/xgbe-drv.c
drivers/net/ethernet/apm/xgene/xgene_enet_main.c
drivers/net/ethernet/aquantia/atlantic/aq_main.c
drivers/net/ethernet/atheros/ag71xx.c
drivers/net/ethernet/atheros/alx/main.c
drivers/net/ethernet/atheros/atl1c/atl1c_main.c
drivers/net/ethernet/atheros/atl1e/atl1e_main.c
drivers/net/ethernet/atheros/atlx/atl1.c
drivers/net/ethernet/atheros/atlx/atl2.c
drivers/net/ethernet/broadcom/b44.c
drivers/net/ethernet/broadcom/bcm63xx_enet.c
drivers/net/ethernet/broadcom/bnx2.c
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
drivers/net/ethernet/broadcom/bnxt/bnxt.c
drivers/net/ethernet/broadcom/tg3.c
drivers/net/ethernet/brocade/bna/bnad.c
drivers/net/ethernet/cadence/macb_main.c
drivers/net/ethernet/calxeda/xgmac.c
drivers/net/ethernet/cavium/liquidio/lio_core.c
drivers/net/ethernet/cavium/liquidio/lio_vf_rep.c
drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
drivers/net/ethernet/cavium/thunder/nicvf_main.c
drivers/net/ethernet/chelsio/cxgb/cxgb2.c
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
drivers/net/ethernet/cisco/enic/enic_main.c
drivers/net/ethernet/cortina/gemini.c
drivers/net/ethernet/dlink/sundance.c
drivers/net/ethernet/faraday/ftmac100.c
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
drivers/net/ethernet/freescale/gianfar.c
drivers/net/ethernet/fungible/funeth/funeth_main.c
drivers/net/ethernet/hisilicon/hns/hns_enet.c
drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
drivers/net/ethernet/huawei/hinic/hinic_main.c
drivers/net/ethernet/ibm/emac/core.c
drivers/net/ethernet/ibm/ibmveth.c
drivers/net/ethernet/intel/e1000/e1000_main.c
drivers/net/ethernet/intel/e1000e/netdev.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/iavf/iavf_main.c
drivers/net/ethernet/intel/ice/ice_main.c
drivers/net/ethernet/intel/idpf/idpf_lib.c
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igbvf/netdev.c
drivers/net/ethernet/intel/igc/igc_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
drivers/net/ethernet/jme.c
drivers/net/ethernet/lantiq_etop.c
drivers/net/ethernet/lantiq_xrx200.c
drivers/net/ethernet/marvell/mv643xx_eth.c
drivers/net/ethernet/marvell/mvneta.c
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
drivers/net/ethernet/marvell/octeon_ep/octep_main.c
drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_main.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
drivers/net/ethernet/marvell/prestera/prestera_main.c
drivers/net/ethernet/marvell/pxa168_eth.c
drivers/net/ethernet/marvell/skge.c
drivers/net/ethernet/marvell/sky2.c
drivers/net/ethernet/mediatek/mtk_eth_soc.c
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib_vlan.c
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
drivers/net/ethernet/micrel/ksz884x.c
drivers/net/ethernet/microchip/lan743x_main.c
drivers/net/ethernet/microchip/lan966x/lan966x_main.c
drivers/net/ethernet/microsoft/mana/mana_en.c
drivers/net/ethernet/myricom/myri10ge/myri10ge.c
drivers/net/ethernet/natsemi/natsemi.c
drivers/net/ethernet/neterion/s2io.c
drivers/net/ethernet/netronome/nfp/nfp_net_common.c
drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
drivers/net/ethernet/ni/nixge.c
drivers/net/ethernet/nvidia/forcedeth.c
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
drivers/net/ethernet/pasemi/pasemi_mac.c
drivers/net/ethernet/pensando/ionic/ionic_lif.c
drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c
drivers/net/ethernet/qlogic/qede/qede_ethtool.c
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
drivers/net/ethernet/qualcomm/emac/emac.c
drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c
drivers/net/ethernet/realtek/8139cp.c
drivers/net/ethernet/realtek/r8169_main.c
drivers/net/ethernet/renesas/ravb_main.c
drivers/net/ethernet/renesas/sh_eth.c
drivers/net/ethernet/rocker/rocker_main.c
drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
drivers/net/ethernet/sfc/efx_common.c
drivers/net/ethernet/sfc/falcon/efx.c
drivers/net/ethernet/sfc/siena/efx_common.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ethernet/sun/cassini.c
drivers/net/ethernet/sun/niu.c
drivers/net/ethernet/sun/sungem.c
drivers/net/ethernet/synopsys/dwc-xlgmac-net.c
drivers/net/ethernet/tehuti/tehuti.c
drivers/net/ethernet/via/via-velocity.c
drivers/net/ethernet/wangxun/libwx/wx_hw.c
drivers/net/ethernet/xilinx/xilinx_axienet_main.c
drivers/net/ethernet/xscale/ixp4xx_eth.c
drivers/net/fjes/fjes_main.c
drivers/net/geneve.c
drivers/net/hyperv/netvsc_drv.c
drivers/net/macsec.c
drivers/net/macvlan.c
drivers/net/net_failover.c
drivers/net/netdevsim/netdev.c
drivers/net/ntb_netdev.c
drivers/net/slip/slip.c
drivers/net/team/team_core.c
drivers/net/usb/aqc111.c
drivers/net/usb/asix_devices.c
drivers/net/usb/ax88179_178a.c
drivers/net/usb/cdc_ncm.c
drivers/net/usb/lan78xx.c
drivers/net/usb/r8152.c
drivers/net/usb/usbnet.c
drivers/net/vmxnet3/vmxnet3_drv.c
drivers/net/vsockmon.c
drivers/net/vxlan/vxlan_core.c
drivers/net/xen-netback/interface.c
drivers/net/xen-netfront.c
drivers/s390/net/ctcm_main.c
net/8021q/vlan_dev.c
net/batman-adv/soft-interface.c
net/bridge/br_device.c
net/dsa/user.c
net/hsr/hsr_device.c
net/hsr/hsr_main.c
net/ipv4/ip_gre.c
net/ipv4/ip_tunnel.c
net/ipv6/ip6_tunnel.c
net/ipv6/ip6_vti.c
net/sched/sch_teql.c

index 6f2a688..32f6a28 100644 (file)
@@ -238,7 +238,7 @@ static int ipoib_change_mtu(struct net_device *dev, int new_mtu)
                        ipoib_warn(priv, "mtu > %d will cause multicast packet drops.\n",
                                   priv->mcast_mtu);
 
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
                return 0;
        }
 
@@ -265,7 +265,7 @@ static int ipoib_change_mtu(struct net_device *dev, int new_mtu)
                if (carrier_status)
                        netif_carrier_on(dev);
        } else {
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
        }
 
        return ret;
index b3a7d60..3b0c775 100644 (file)
@@ -4710,7 +4710,7 @@ static int bond_change_mtu(struct net_device *bond_dev, int new_mtu)
                }
        }
 
-       bond_dev->mtu = new_mtu;
+       WRITE_ONCE(bond_dev->mtu, new_mtu);
 
        return 0;
 
index 3a3be5c..83e724e 100644 (file)
@@ -338,7 +338,7 @@ int can_change_mtu(struct net_device *dev, int new_mtu)
                return -EINVAL;
        }
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 EXPORT_SYMBOL_GPL(can_change_mtu);
index 285635c..f67e858 100644 (file)
@@ -140,7 +140,7 @@ static int vcan_change_mtu(struct net_device *dev, int new_mtu)
            !can_is_canxl_dev_mtu(new_mtu))
                return -EINVAL;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index f7fabba..9e1b7d4 100644 (file)
@@ -135,7 +135,7 @@ static int vxcan_change_mtu(struct net_device *dev, int new_mtu)
            !can_is_canxl_dev_mtu(new_mtu))
                return -EINVAL;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index 3d9220f..b325e0c 100644 (file)
@@ -3852,7 +3852,7 @@ static int et131x_change_mtu(struct net_device *netdev, int new_mtu)
 
        et131x_disable_txrx(netdev);
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        et131x_adapter_memory_free(adapter);
 
index eafef84..3d8ac63 100644 (file)
@@ -2539,7 +2539,7 @@ static int ace_change_mtu(struct net_device *dev, int new_mtu)
        struct ace_regs __iomem *regs = ap->regs;
 
        writel(new_mtu + ETH_HLEN + 4, &regs->IfMtu);
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        if (new_mtu > ACE_STD_MTU) {
                if (!(ap->jumbo)) {
index 1c8763b..3c112c1 100644 (file)
@@ -788,7 +788,7 @@ static int tse_change_mtu(struct net_device *dev, int new_mtu)
                return -EBUSY;
        }
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        netdev_update_features(dev);
 
        return 0;
index be5acfa..28eaeda 100644 (file)
@@ -104,7 +104,7 @@ static int ena_change_mtu(struct net_device *dev, int new_mtu)
        if (!ret) {
                netif_dbg(adapter, drv, dev, "Set MTU to %d\n", new_mtu);
                update_rx_ring_mtu(adapter, new_mtu);
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
        } else {
                netif_err(adapter, drv, dev, "Failed to set MTU to %d\n",
                          new_mtu);
index c1b5e9a..f64f96f 100644 (file)
@@ -1520,9 +1520,9 @@ static int amd8111e_change_mtu(struct net_device *dev, int new_mtu)
 
        if (!netif_running(dev)) {
                /* new_mtu will be used
-                * when device starts netxt time
+                * when device starts next time
                 */
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
                return 0;
        }
 
@@ -1531,7 +1531,7 @@ static int amd8111e_change_mtu(struct net_device *dev, int new_mtu)
        /* stop the chip */
        writel(RUN, lp->mmio + CMD0);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        err = amd8111e_restart(dev);
        spin_unlock_irq(&lp->lock);
index 6b73648..c4a4e31 100644 (file)
@@ -2070,7 +2070,7 @@ static int xgbe_change_mtu(struct net_device *netdev, int mtu)
                return ret;
 
        pdata->rx_buf_size = ret;
-       netdev->mtu = mtu;
+       WRITE_ONCE(netdev->mtu, mtu);
 
        xgbe_restart_dev(pdata);
 
index 4490002..4af9d89 100644 (file)
@@ -1530,7 +1530,7 @@ static int xgene_change_mtu(struct net_device *ndev, int new_mtu)
        frame_size = (new_mtu > ETH_DATA_LEN) ? (new_mtu + 18) : 0x600;
 
        xgene_enet_close(ndev);
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
        pdata->mac_ops->set_framesize(pdata, frame_size);
        xgene_enet_open(ndev);
 
index 0b2a521..c1d1673 100644 (file)
@@ -146,7 +146,7 @@ static int aq_ndev_change_mtu(struct net_device *ndev, int new_mtu)
 
        if (err < 0)
                goto err_exit;
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
 
 err_exit:
        return err;
index 0f2f400..a38be92 100644 (file)
@@ -1788,7 +1788,7 @@ static int ag71xx_change_mtu(struct net_device *ndev, int new_mtu)
 {
        struct ag71xx *ag = netdev_priv(ndev);
 
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
        ag71xx_wr(ag, AG71XX_REG_MAC_MFL,
                  ag71xx_max_frame_len(ndev->mtu));
 
index 49bb9a8..3d28654 100644 (file)
@@ -1176,7 +1176,7 @@ static int alx_change_mtu(struct net_device *netdev, int mtu)
        struct alx_priv *alx = netdev_priv(netdev);
        int max_frame = ALX_MAX_FRAME_LEN(mtu);
 
-       netdev->mtu = mtu;
+       WRITE_ONCE(netdev->mtu, mtu);
        alx->hw.mtu = mtu;
        alx->rxbuf_size = max(max_frame, ALX_DEF_RXBUF_SIZE);
        netdev_update_features(netdev);
index 46cdc32..c571614 100644 (file)
@@ -561,7 +561,7 @@ static int atl1c_change_mtu(struct net_device *netdev, int new_mtu)
        if (netif_running(netdev)) {
                while (test_and_set_bit(__AT_RESETTING, &adapter->flags))
                        msleep(1);
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
                adapter->hw.max_frame_size = new_mtu;
                atl1c_set_rxbufsize(adapter, netdev);
                atl1c_down(adapter);
index 5f2a6fc..9b778b3 100644 (file)
@@ -428,7 +428,7 @@ static int atl1e_change_mtu(struct net_device *netdev, int new_mtu)
        if (netif_running(netdev)) {
                while (test_and_set_bit(__AT_RESETTING, &adapter->flags))
                        msleep(1);
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
                adapter->hw.max_frame_size = new_mtu;
                adapter->hw.rx_jumbo_th = (max_frame + 7) >> 3;
                atl1e_down(adapter);
index a9014d7..3afd362 100644 (file)
@@ -2687,7 +2687,7 @@ static int atl1_change_mtu(struct net_device *netdev, int new_mtu)
        adapter->rx_buffer_len = (max_frame + 7) & ~7;
        adapter->hw.rx_jumbo_th = adapter->rx_buffer_len / 8;
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
        if (netif_running(netdev)) {
                atl1_down(adapter);
                atl1_up(adapter);
index bcfc948..fa9a491 100644 (file)
@@ -905,7 +905,7 @@ static int atl2_change_mtu(struct net_device *netdev, int new_mtu)
        struct atl2_hw *hw = &adapter->hw;
 
        /* set MTU */
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
        hw->max_frame_size = new_mtu;
        ATL2_WRITE_REG(hw, REG_MTU, new_mtu + ETH_HLEN +
                       VLAN_HLEN + ETH_FCS_LEN);
index 1be6d14..e5809ad 100644 (file)
@@ -1042,13 +1042,13 @@ static int b44_change_mtu(struct net_device *dev, int new_mtu)
                /* We'll just catch it later when the
                 * device is up'd.
                 */
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
                return 0;
        }
 
        spin_lock_irq(&bp->lock);
        b44_halt(bp);
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        b44_init_rings(bp);
        b44_init_hw(bp, B44_FULL_RESET);
        spin_unlock_irq(&bp->lock);
index 3196c4d..3c0e3b9 100644 (file)
@@ -1652,7 +1652,7 @@ static int bcm_enet_change_mtu(struct net_device *dev, int new_mtu)
        priv->rx_frag_size = SKB_DATA_ALIGN(priv->rx_buf_offset + priv->rx_buf_size) +
                                            SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index b65b859..6ec773e 100644 (file)
@@ -7912,7 +7912,7 @@ bnx2_change_mtu(struct net_device *dev, int new_mtu)
 {
        struct bnx2 *bp = netdev_priv(dev);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return bnx2_change_ring_size(bp, bp->rx_ring_size, bp->tx_ring_size,
                                     false);
 }
index c9b6acd..a8e07e5 100644 (file)
@@ -4902,7 +4902,7 @@ int bnx2x_change_mtu(struct net_device *dev, int new_mtu)
         * because the actual alloc size is
         * only updated as part of load
         */
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        if (!bnx2x_mtu_allows_gro(new_mtu))
                dev->features &= ~NETIF_F_GRO_HW;
index 0d1ed6e..c437ca1 100644 (file)
@@ -14280,7 +14280,7 @@ static int bnxt_change_mtu(struct net_device *dev, int new_mtu)
        if (netif_running(dev))
                bnxt_close_nic(bp, true, false);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        bnxt_set_ring_params(bp);
 
        if (netif_running(dev))
index e6ff3c9..1589a49 100644 (file)
@@ -14295,7 +14295,7 @@ static void tg3_set_rx_mode(struct net_device *dev)
 static inline void tg3_set_mtu(struct net_device *dev, struct tg3 *tp,
                               int new_mtu)
 {
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        if (new_mtu > ETH_DATA_LEN) {
                if (tg3_flag(tp, 5780_CLASS)) {
index c321744..fe121d3 100644 (file)
@@ -3276,7 +3276,7 @@ bnad_change_mtu(struct net_device *netdev, int new_mtu)
        mutex_lock(&bnad->conf_mutex);
 
        mtu = netdev->mtu;
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        frame = BNAD_FRAME_SIZE(mtu);
        new_frame = BNAD_FRAME_SIZE(new_mtu);
index 898debf..241ce9a 100644 (file)
@@ -3022,7 +3022,7 @@ static int macb_change_mtu(struct net_device *dev, int new_mtu)
        if (netif_running(dev))
                return -EBUSY;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        return 0;
 }
index 5e97f1e..a71b320 100644 (file)
@@ -1358,7 +1358,7 @@ static int xgmac_change_mtu(struct net_device *dev, int new_mtu)
 
        /* Bring interface down, change mtu and bring interface back up */
        xgmac_stop(dev);
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return xgmac_open(dev);
 }
 
index f38d31b..674c548 100644 (file)
@@ -1262,7 +1262,7 @@ int liquidio_change_mtu(struct net_device *netdev, int new_mtu)
                return -EINVAL;
        }
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
        lio->mtu = new_mtu;
 
        WRITE_ONCE(sc->caller_is_done, true);
index aa6c0df..96c6ea1 100644 (file)
@@ -218,7 +218,7 @@ lio_vf_rep_change_mtu(struct net_device *ndev, int new_mtu)
                return -EIO;
        }
 
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
 
        return 0;
 }
index 007d4b0..744f243 100644 (file)
@@ -649,7 +649,7 @@ static int octeon_mgmt_change_mtu(struct net_device *netdev, int new_mtu)
        struct octeon_mgmt *p = netdev_priv(netdev);
        int max_packet = new_mtu + ETH_HLEN + ETH_FCS_LEN;
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        /* HW lifts the limit if the frame is VLAN tagged
         * (+4 bytes per each tag, up to two tags)
index eff350e..aebb9fe 100644 (file)
@@ -1589,7 +1589,7 @@ static int nicvf_change_mtu(struct net_device *netdev, int new_mtu)
                return -EINVAL;
        }
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (!netif_running(netdev))
                return 0;
index d2286ad..7d7d3e0 100644 (file)
@@ -844,7 +844,7 @@ static int t1_change_mtu(struct net_device *dev, int new_mtu)
                return -EOPNOTSUPP;
        if ((ret = mac->ops->set_mtu(mac, new_mtu)))
                return ret;
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index 2236f1d..f92a355 100644 (file)
@@ -2559,7 +2559,7 @@ static int cxgb_change_mtu(struct net_device *dev, int new_mtu)
 
        if ((ret = t3_mac_set_mtu(&pi->mac, new_mtu)))
                return ret;
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        init_port_mtus(adapter);
        if (adapter->params.rev == 0 && offload_running(adapter))
                t3_load_mtus(adapter, adapter->params.mtus,
index 2eb33a7..2418645 100644 (file)
@@ -3180,7 +3180,7 @@ static int cxgb_change_mtu(struct net_device *dev, int new_mtu)
        ret = t4_set_rxmode(pi->adapter, pi->adapter->mbox, pi->viid,
                            pi->viid_mirror, new_mtu, -1, -1, -1, -1, true);
        if (!ret)
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
        return ret;
 }
 
index 9ba0864..2fbe0f0 100644 (file)
@@ -1169,7 +1169,7 @@ static int cxgb4vf_change_mtu(struct net_device *dev, int new_mtu)
        ret = t4vf_set_rxmode(pi->adapter, pi->viid, new_mtu,
                              -1, -1, -1, -1, true);
        if (!ret)
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
        return ret;
 }
 
index d266a87..f604119 100644 (file)
@@ -2027,7 +2027,7 @@ static int _enic_change_mtu(struct net_device *netdev, int new_mtu)
                        return err;
        }
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (running) {
                err = enic_open(netdev);
index 705c3eb..2f98f64 100644 (file)
@@ -1978,7 +1978,7 @@ static int gmac_change_mtu(struct net_device *netdev, int new_mtu)
 
        gmac_disable_tx_rx(netdev);
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
        gmac_update_config0_reg(netdev, max_len << CONFIG0_MAXLEN_SHIFT,
                                CONFIG0_MAXLEN_MASK);
 
index aaf0eda..8af5ece 100644 (file)
@@ -708,7 +708,7 @@ static int change_mtu(struct net_device *dev, int new_mtu)
 {
        if (netif_running(dev))
                return -EBUSY;
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index 003bc9a..1047c80 100644 (file)
@@ -1092,7 +1092,7 @@ static int ftmac100_change_mtu(struct net_device *netdev, int mtu)
        }
        iowrite32(maccr, priv->base + FTMAC100_OFFSET_MACCR);
 
-       netdev->mtu = mtu;
+       WRITE_ONCE(netdev->mtu, mtu);
 
        return 0;
 }
index dcbc598..baa0b3c 100644 (file)
@@ -2995,7 +2995,7 @@ static int dpaa_change_mtu(struct net_device *net_dev, int new_mtu)
        if (priv->xdp_prog && !xdp_validate_mtu(priv, new_mtu))
                return -EINVAL;
 
-       net_dev->mtu = new_mtu;
+       WRITE_ONCE(net_dev->mtu, new_mtu);
        return 0;
 }
 
index 40e8818..6866807 100644 (file)
@@ -2698,7 +2698,7 @@ static int dpaa2_eth_change_mtu(struct net_device *dev, int new_mtu)
                return err;
 
 out:
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index f3543a2..a71f848 100644 (file)
@@ -590,7 +590,7 @@ static int dpaa2_switch_port_change_mtu(struct net_device *netdev, int mtu)
                return err;
        }
 
-       netdev->mtu = mtu;
+       WRITE_ONCE(netdev->mtu, mtu);
        return 0;
 }
 
index a811238..2baef59 100644 (file)
@@ -2026,7 +2026,7 @@ static int gfar_change_mtu(struct net_device *dev, int new_mtu)
        if (dev->flags & IFF_UP)
                stop_gfar(dev);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        if (dev->flags & IFF_UP)
                startup_gfar(dev);
index df86770..ac86179 100644 (file)
@@ -927,7 +927,7 @@ static int fun_change_mtu(struct net_device *netdev, int new_mtu)
 
        rc = fun_port_write_cmd(fp, FUN_ADMIN_PORT_KEY_MTU, new_mtu);
        if (!rc)
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
        return rc;
 }
 
index 8a713ee..fd32e15 100644 (file)
@@ -1777,7 +1777,7 @@ static int hns_nic_change_mtu(struct net_device *ndev, int new_mtu)
        }
 
        /* finally, set new mtu to netdevice */
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
 
 out:
        if (if_running) {
index 19668a8..dfdc0e0 100644 (file)
@@ -2761,7 +2761,7 @@ static int hns3_nic_change_mtu(struct net_device *netdev, int new_mtu)
                netdev_err(netdev, "failed to change MTU in hardware %d\n",
                           ret);
        else
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
 
        return ret;
 }
index 499c657..890f213 100644 (file)
@@ -581,7 +581,7 @@ static int hinic_change_mtu(struct net_device *netdev, int new_mtu)
        if (err)
                netif_err(nic_dev, drv, netdev, "Failed to set port mtu\n");
        else
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
 
        return err;
 }
index e6e47b1..a19d098 100644 (file)
@@ -1098,7 +1098,7 @@ static int emac_resize_rx_ring(struct emac_instance *dev, int new_mtu)
                /* This is to prevent starting RX channel in emac_rx_enable() */
                set_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags);
 
-               dev->ndev->mtu = new_mtu;
+               WRITE_ONCE(dev->ndev->mtu, new_mtu);
                emac_full_tx_reset(dev);
        }
 
@@ -1130,7 +1130,7 @@ static int emac_change_mtu(struct net_device *ndev, int new_mtu)
        }
 
        if (!ret) {
-               ndev->mtu = new_mtu;
+               WRITE_ONCE(ndev->mtu, new_mtu);
                dev->rx_skb_size = emac_rx_skb_size(new_mtu);
                dev->rx_sync_size = emac_rx_sync_size(new_mtu);
        }
index b5aef0b..4c9d9ba 100644 (file)
@@ -1537,7 +1537,7 @@ static int ibmveth_change_mtu(struct net_device *dev, int new_mtu)
                adapter->rx_buff_pool[i].active = 1;
 
                if (new_mtu_oh <= adapter->rx_buff_pool[i].buff_size) {
-                       dev->mtu = new_mtu;
+                       WRITE_ONCE(dev->mtu, new_mtu);
                        vio_cmo_set_dev_desired(viodev,
                                                ibmveth_get_desired_dma
                                                (viodev));
index 5b43f9b..60fff9a 100644 (file)
@@ -3569,7 +3569,7 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
 
        netdev_dbg(netdev, "changing MTU from %d to %d\n",
                   netdev->mtu, new_mtu);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (netif_running(netdev))
                e1000_up(adapter);
index bef65ee..220d62f 100644 (file)
@@ -6038,7 +6038,7 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
        adapter->max_frame_size = max_frame;
        netdev_dbg(netdev, "changing MTU from %d to %d\n",
                   netdev->mtu, new_mtu);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        pm_runtime_get_sync(netdev->dev.parent);
 
index 2cc7bec..143e37a 100644 (file)
@@ -2961,7 +2961,7 @@ static int i40e_change_mtu(struct net_device *netdev, int new_mtu)
 
        netdev_dbg(netdev, "changing MTU from %d to %d\n",
                   netdev->mtu, new_mtu);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
        if (netif_running(netdev))
                i40e_vsi_reinit_locked(vsi);
        set_bit(__I40E_CLIENT_SERVICE_REQUESTED, pf->state);
index d4f4fd6..d4699c4 100644 (file)
@@ -4296,7 +4296,7 @@ static int iavf_change_mtu(struct net_device *netdev, int new_mtu)
 
        netdev_dbg(netdev, "changing MTU from %d to %d\n",
                   netdev->mtu, new_mtu);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (netif_running(netdev)) {
                iavf_schedule_reset(adapter, IAVF_FLAG_RESET_NEEDED);
index 06549da..125c53c 100644 (file)
@@ -7770,7 +7770,7 @@ static int ice_change_mtu(struct net_device *netdev, int new_mtu)
                return -EBUSY;
        }
 
-       netdev->mtu = (unsigned int)new_mtu;
+       WRITE_ONCE(netdev->mtu, (unsigned int)new_mtu);
        err = ice_down_up(vsi);
        if (err)
                return err;
index 5d3532c..52ceda6 100644 (file)
@@ -2234,7 +2234,7 @@ static int idpf_change_mtu(struct net_device *netdev, int new_mtu)
        idpf_vport_ctrl_lock(netdev);
        vport = idpf_netdev_to_vport(netdev);
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        err = idpf_initiate_soft_reset(vport, IDPF_SR_MTU_CHANGE);
 
index 74a998f..7d93890 100644 (file)
@@ -6641,7 +6641,7 @@ static int igb_change_mtu(struct net_device *netdev, int new_mtu)
 
        netdev_dbg(netdev, "changing MTU from %d to %d\n",
                   netdev->mtu, new_mtu);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (netif_running(netdev))
                igb_up(adapter);
index 40ccd24..7661edd 100644 (file)
@@ -2434,7 +2434,7 @@ static int igbvf_change_mtu(struct net_device *netdev, int new_mtu)
 
        netdev_dbg(netdev, "changing MTU from %d to %d\n",
                   netdev->mtu, new_mtu);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (netif_running(netdev))
                igbvf_up(adapter);
index 34c257a..c30f0f5 100644 (file)
@@ -5275,7 +5275,7 @@ static int igc_change_mtu(struct net_device *netdev, int new_mtu)
                igc_down(adapter);
 
        netdev_dbg(netdev, "changing MTU from %d to %d\n", netdev->mtu, new_mtu);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (netif_running(netdev))
                igc_up(adapter);
index 43e7e75..094653e 100644 (file)
@@ -6847,7 +6847,7 @@ static int ixgbe_change_mtu(struct net_device *netdev, int new_mtu)
                   netdev->mtu, new_mtu);
 
        /* must set new MTU before calling down or up */
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (netif_running(netdev))
                ixgbe_reinit_locked(adapter);
index 3161a13..b938dc0 100644 (file)
@@ -4292,7 +4292,7 @@ static int ixgbevf_change_mtu(struct net_device *netdev, int new_mtu)
               netdev->mtu, new_mtu);
 
        /* must set new MTU before calling down or up */
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (netif_running(netdev))
                ixgbevf_reinit_locked(adapter);
index 1732ec3..b06e245 100644 (file)
@@ -2301,7 +2301,7 @@ jme_change_mtu(struct net_device *netdev, int new_mtu)
 {
        struct jme_adapter *jme = netdev_priv(netdev);
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
        netdev_update_features(netdev);
 
        jme_restart_rx_engine(jme);
index 1d5b7bb..5352fee 100644 (file)
@@ -519,7 +519,7 @@ ltq_etop_change_mtu(struct net_device *dev, int new_mtu)
        struct ltq_etop_priv *priv = netdev_priv(dev);
        unsigned long flags;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        spin_lock_irqsave(&priv->lock, flags);
        ltq_etop_w32((ETOP_PLEN_UNDER << 16) | new_mtu, LTQ_ETOP_IGPLEN);
index 8bd4def..07904a5 100644 (file)
@@ -419,7 +419,7 @@ xrx200_change_mtu(struct net_device *net_dev, int new_mtu)
        int curr_desc;
        int ret = 0;
 
-       net_dev->mtu = new_mtu;
+       WRITE_ONCE(net_dev->mtu, new_mtu);
        priv->rx_buf_size = xrx200_buffer_size(new_mtu);
        priv->rx_skb_size = xrx200_skb_size(priv->rx_buf_size);
 
@@ -440,7 +440,7 @@ xrx200_change_mtu(struct net_device *net_dev, int new_mtu)
                buff = ch_rx->rx_buff[ch_rx->dma.desc];
                ret = xrx200_alloc_buf(ch_rx, netdev_alloc_frag);
                if (ret) {
-                       net_dev->mtu = old_mtu;
+                       WRITE_ONCE(net_dev->mtu, old_mtu);
                        priv->rx_buf_size = xrx200_buffer_size(old_mtu);
                        priv->rx_skb_size = xrx200_skb_size(priv->rx_buf_size);
                        break;
index f0bdc06..f35ae2c 100644 (file)
@@ -2562,7 +2562,7 @@ static int mv643xx_eth_change_mtu(struct net_device *dev, int new_mtu)
 {
        struct mv643xx_eth_private *mp = netdev_priv(dev);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        mv643xx_eth_recalc_skb_size(mp);
        tx_set_rate(mp, 1000000000, 16777216);
 
index 26bf5d4..4189483 100644 (file)
@@ -3861,7 +3861,7 @@ static int mvneta_change_mtu(struct net_device *dev, int mtu)
                return -EINVAL;
        }
 
-       dev->mtu = mtu;
+       WRITE_ONCE(dev->mtu, mtu);
 
        if (!netif_running(dev)) {
                if (pp->bm_priv)
index 19253a0..e91486c 100644 (file)
@@ -1375,7 +1375,7 @@ static int mvpp2_bm_update_mtu(struct net_device *dev, int mtu)
        }
 
 out_set:
-       dev->mtu = mtu;
+       WRITE_ONCE(dev->mtu, mtu);
        dev->wanted_features = dev->features;
 
        netdev_update_features(dev);
index 7c9faa7..549436e 100644 (file)
@@ -1096,7 +1096,7 @@ static int octep_change_mtu(struct net_device *netdev, int new_mtu)
                                     true);
        if (!err) {
                oct->link_info.mtu = new_mtu;
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
        }
 
        return err;
index dd49d0b..7e6771c 100644 (file)
@@ -881,7 +881,7 @@ static int octep_vf_change_mtu(struct net_device *netdev, int new_mtu)
        err = octep_vf_mbox_set_mtu(oct, new_mtu);
        if (!err) {
                oct->link_info.mtu = new_mtu;
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
        }
        return err;
 }
index 14bccff..f5bce3e 100644 (file)
@@ -67,7 +67,7 @@ static int otx2_change_mtu(struct net_device *netdev, int new_mtu)
 
        netdev_info(netdev, "Changing MTU from %d to %d\n",
                    netdev->mtu, new_mtu);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (if_up)
                err = otx2_open(netdev);
index cf0aa16..99fcc56 100644 (file)
@@ -456,7 +456,7 @@ static int otx2vf_change_mtu(struct net_device *netdev, int new_mtu)
 
        netdev_info(netdev, "Changing MTU from %d to %d\n",
                    netdev->mtu, new_mtu);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (if_up)
                err = otx2vf_open(netdev);
index ba6d53a..63ae019 100644 (file)
@@ -489,7 +489,7 @@ static int prestera_port_change_mtu(struct net_device *dev, int mtu)
        if (err)
                return err;
 
-       dev->mtu = mtu;
+       WRITE_ONCE(dev->mtu, mtu);
 
        return 0;
 }
index dd6ca2e..1a59c95 100644 (file)
@@ -1188,7 +1188,7 @@ static int pxa168_eth_change_mtu(struct net_device *dev, int mtu)
 {
        struct pxa168_eth_private *pep = netdev_priv(dev);
 
-       dev->mtu = mtu;
+       WRITE_ONCE(dev->mtu, mtu);
        set_port_config_ext(pep);
 
        if (!netif_running(dev))
index 1b43704..fcfb345 100644 (file)
@@ -2905,13 +2905,13 @@ static int skge_change_mtu(struct net_device *dev, int new_mtu)
        int err;
 
        if (!netif_running(dev)) {
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
                return 0;
        }
 
        skge_down(dev);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        err = skge_up(dev);
        if (err)
index f3f7f4c..a7a16ea 100644 (file)
@@ -2384,7 +2384,7 @@ static int sky2_change_mtu(struct net_device *dev, int new_mtu)
        u32 imask;
 
        if (!netif_running(dev)) {
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
                netdev_update_features(dev);
                return 0;
        }
@@ -2407,7 +2407,7 @@ static int sky2_change_mtu(struct net_device *dev, int new_mtu)
        sky2_rx_stop(sky2);
        sky2_rx_clean(sky2);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        netdev_update_features(dev);
 
        mode = DATA_BLIND_VAL(DATA_BLIND_DEF) | GM_SMOD_VLAN_ENA;
index d7a96dc..179c023 100644 (file)
@@ -4055,7 +4055,7 @@ static int mtk_change_mtu(struct net_device *dev, int new_mtu)
        }
 
        mtk_set_mcr_max_rx(mac, length);
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        return 0;
 }
index 5d3fde6..4c089cf 100644 (file)
@@ -1649,7 +1649,7 @@ int mlx4_en_start_port(struct net_device *dev)
               sizeof(struct ethtool_flow_id) * MAX_NUM_OF_FS_RULES);
 
        /* Calculate Rx buf size */
-       dev->mtu = min(dev->mtu, priv->max_mtu);
+       WRITE_ONCE(dev->mtu, min(dev->mtu, priv->max_mtu));
        mlx4_en_calc_rx_buf(dev);
        en_dbg(DRV, priv, "Rx buf size:%d\n", priv->rx_skb_size);
 
@@ -2394,7 +2394,7 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)
            !mlx4_en_check_xdp_mtu(dev, new_mtu))
                return -EOPNOTSUPP;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        if (netif_running(dev)) {
                mutex_lock(&mdev->state_lock);
index 3bd0695..ffe8919 100644 (file)
@@ -4525,7 +4525,7 @@ int mlx5e_change_mtu(struct net_device *netdev, int new_mtu,
        err = mlx5e_safe_switch_params(priv, &new_params, preactivate, NULL, reset);
 
 out:
-       netdev->mtu = params->sw_mtu;
+       WRITE_ONCE(netdev->mtu, params->sw_mtu);
        mutex_unlock(&priv->state_lock);
        return err;
 }
index d77be1b..8e0404c 100644 (file)
@@ -531,7 +531,7 @@ static int mlx5i_change_mtu(struct net_device *netdev, int new_mtu)
        if (err)
                goto out;
 
-       netdev->mtu = new_params.sw_mtu;
+       WRITE_ONCE(netdev->mtu, new_params.sw_mtu);
 
 out:
        mutex_unlock(&priv->state_lock);
index f874713..028a769 100644 (file)
@@ -280,7 +280,7 @@ static int mlx5i_pkey_change_mtu(struct net_device *netdev, int new_mtu)
        struct mlx5e_priv *priv = mlx5i_epriv(netdev);
 
        mutex_lock(&priv->state_lock);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
        mutex_unlock(&priv->state_lock);
 
        return 0;
index bb642e9..030ed71 100644 (file)
@@ -825,7 +825,7 @@ static int mlxsw_sp_port_change_mtu(struct net_device *dev, int mtu)
        err = mlxsw_sp_port_mtu_set(mlxsw_sp_port, mtu);
        if (err)
                goto err_port_mtu_set;
-       dev->mtu = mtu;
+       WRITE_ONCE(dev->mtu, mtu);
        return 0;
 
 err_port_mtu_set:
index c5aeeb9..dc1d9f7 100644 (file)
@@ -5427,7 +5427,7 @@ static int netdev_change_mtu(struct net_device *dev, int new_mtu)
        }
        hw_mtu = (hw_mtu + 3) & ~3;
        hw_priv->mtu = hw_mtu;
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        return 0;
 }
index cee4772..6be8a43 100644 (file)
@@ -3184,7 +3184,7 @@ static int lan743x_netdev_change_mtu(struct net_device *netdev, int new_mtu)
 
        ret = lan743x_mac_set_mtu(adapter, new_mtu);
        if (!ret)
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
        return ret;
 }
 
index b7e75da..b12d3b8 100644 (file)
@@ -402,7 +402,7 @@ static int lan966x_port_change_mtu(struct net_device *dev, int new_mtu)
 
        lan_wr(DEV_MAC_MAXLEN_CFG_MAX_LEN_SET(LAN966X_HW_MTU(new_mtu)),
               lan966x, DEV_MAC_MAXLEN_CFG(port->chip_port));
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        if (!lan966x->fdma)
                return 0;
index f2fae65..d087cf9 100644 (file)
@@ -690,12 +690,12 @@ static int mana_change_mtu(struct net_device *ndev, int new_mtu)
                goto out;
        }
 
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
 
        err = mana_attach(ndev);
        if (err) {
                netdev_err(ndev, "mana_attach failed: %d\n", err);
-               ndev->mtu = old_mtu;
+               WRITE_ONCE(ndev->mtu, old_mtu);
        }
 
 out:
index 7b7e1c5..b7d9657 100644 (file)
@@ -3036,11 +3036,11 @@ static int myri10ge_change_mtu(struct net_device *dev, int new_mtu)
                /* if we change the mtu on an active device, we must
                 * reset the device so the firmware sees the change */
                myri10ge_close(dev);
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
                myri10ge_open(dev);
-       } else
-               dev->mtu = new_mtu;
-
+       } else {
+               WRITE_ONCE(dev->mtu, new_mtu);
+       }
        return 0;
 }
 
index 650a5a1..ad0c148 100644 (file)
@@ -2526,7 +2526,7 @@ static void __set_rx_mode(struct net_device *dev)
 
 static int natsemi_change_mtu(struct net_device *dev, int new_mtu)
 {
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        /* synchronized against open : rtnl_lock() held by caller */
        if (netif_running(dev)) {
index 55408f1..f235e76 100644 (file)
@@ -6637,7 +6637,7 @@ static int s2io_change_mtu(struct net_device *dev, int new_mtu)
        struct s2io_nic *sp = netdev_priv(dev);
        int ret = 0;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        if (netif_running(dev)) {
                s2io_stop_all_tx_queue(sp);
                s2io_card_down(sp);
index 997cc4f..182ba0a 100644 (file)
@@ -1526,7 +1526,7 @@ static void nfp_net_dp_swap(struct nfp_net *nn, struct nfp_net_dp *dp)
        *dp = nn->dp;
        nn->dp = new_dp;
 
-       nn->dp.netdev->mtu = new_dp.mtu;
+       WRITE_ONCE(nn->dp.netdev->mtu, new_dp.mtu);
 
        if (!netif_is_rxfh_configured(nn->dp.netdev))
                nfp_net_rss_init_itbl(nn);
index 3af1229..eee0bfc 100644 (file)
@@ -177,7 +177,7 @@ static int nfp_repr_change_mtu(struct net_device *netdev, int new_mtu)
        if (err)
                return err;
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        return 0;
 }
index fa1f78b..2aa4ad9 100644 (file)
@@ -946,7 +946,7 @@ static int nixge_change_mtu(struct net_device *ndev, int new_mtu)
             NIXGE_MAX_JUMBO_FRAME_SIZE)
                return -EINVAL;
 
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
 
        return 0;
 }
index 31f896c..720f577 100644 (file)
@@ -3098,7 +3098,7 @@ static int nv_change_mtu(struct net_device *dev, int new_mtu)
        int old_mtu;
 
        old_mtu = dev->mtu;
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        /* return early if the buffer sizes will not change */
        if (old_mtu <= ETH_DATA_LEN && new_mtu <= ETH_DATA_LEN)
index 28b7cec..4ac29cd 100644 (file)
@@ -2184,7 +2184,7 @@ static int pch_gbe_change_mtu(struct net_device *netdev, int new_mtu)
                }
        } else {
                pch_gbe_reset(adapter);
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
                adapter->hw.mac.max_frame_size = max_frame;
        }
 
index ed7dd0a..62ba269 100644 (file)
@@ -1639,7 +1639,7 @@ static int pasemi_mac_change_mtu(struct net_device *dev, int new_mtu)
        reg |= PAS_MAC_CFG_MACCFG_MAXF(new_mtu + ETH_HLEN + 4);
        write_mac_reg(mac, PAS_MAC_CFG_MACCFG, reg);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        /* MTU + ETH_HLEN + VLAN_HLEN + 2 64B cachelines */
        mac->bufsz = new_mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128;
 
index 7f0c6cd..24870da 100644 (file)
@@ -1761,13 +1761,13 @@ static int ionic_change_mtu(struct net_device *netdev, int new_mtu)
 
        /* if we're not running, nothing more to do */
        if (!netif_running(netdev)) {
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
                return 0;
        }
 
        mutex_lock(&lif->queue_lock);
        ionic_stop_queues_reconfig(lif);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
        err = ionic_start_queues_reconfig(lif);
        mutex_unlock(&lif->queue_lock);
 
index 6e12cd2..89c8b23 100644 (file)
@@ -960,7 +960,7 @@ int netxen_nic_change_mtu(struct net_device *netdev, int mtu)
                rc = adapter->set_mtu(adapter, mtu);
 
        if (!rc)
-               netdev->mtu = mtu;
+               WRITE_ONCE(netdev->mtu, mtu);
 
        return rc;
 }
index ae3ebf0..f497f6c 100644 (file)
@@ -1026,7 +1026,7 @@ static int qede_get_regs_len(struct net_device *ndev)
 static void qede_update_mtu(struct qede_dev *edev,
                            struct qede_reload_args *args)
 {
-       edev->ndev->mtu = args->u.mtu;
+       WRITE_ONCE(edev->ndev->mtu, args->u.mtu);
 }
 
 /* Netdevice NDOs */
index 4b8bc46..ae4ee03 100644 (file)
@@ -1015,7 +1015,7 @@ int qlcnic_change_mtu(struct net_device *netdev, int mtu)
        rc = qlcnic_fw_cmd_set_mtu(adapter, mtu);
 
        if (!rc)
-               netdev->mtu = mtu;
+               WRITE_ONCE(netdev->mtu, mtu);
 
        return rc;
 }
index 4c06f55..99d4647 100644 (file)
@@ -216,7 +216,7 @@ static int emac_change_mtu(struct net_device *netdev, int new_mtu)
        netif_dbg(adpt, hw, adpt->netdev,
                  "changing MTU from %d to %d\n", netdev->mtu,
                  new_mtu);
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (netif_running(netdev))
                return emac_reinit_locked(adpt);
index 9d2a956..f1e40aa 100644 (file)
@@ -90,7 +90,7 @@ static int rmnet_vnd_change_mtu(struct net_device *rmnet_dev, int new_mtu)
            new_mtu > (priv->real_dev->mtu - headroom))
                return -EINVAL;
 
-       rmnet_dev->mtu = new_mtu;
+       WRITE_ONCE(rmnet_dev->mtu, new_mtu);
        return 0;
 }
 
index f5786d7..5652da8 100644 (file)
@@ -1277,14 +1277,14 @@ static int cp_change_mtu(struct net_device *dev, int new_mtu)
 
        /* if network interface not up, no need for complexity */
        if (!netif_running(dev)) {
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
                cp_set_rxbufsize(cp);   /* set new rx buf size */
                return 0;
        }
 
        /* network IS up, close it, reset MTU, and come up again. */
        cp_close(dev);
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        cp_set_rxbufsize(cp);
        return cp_open(dev);
 }
index fab21d2..5abbea9 100644 (file)
@@ -3924,7 +3924,7 @@ static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)
 {
        struct rtl8169_private *tp = netdev_priv(dev);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        netdev_update_features(dev);
        rtl_jumbo_config(tp);
        rtl_set_eee_txidle_timer(tp);
index 384ddad..4d10028 100644 (file)
@@ -2423,7 +2423,7 @@ static int ravb_change_mtu(struct net_device *ndev, int new_mtu)
 {
        struct ravb_private *priv = netdev_priv(ndev);
 
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
 
        if (netif_running(ndev)) {
                synchronize_irq(priv->emac_irq);
index 0786eb0..7a25903 100644 (file)
@@ -2624,7 +2624,7 @@ static int sh_eth_change_mtu(struct net_device *ndev, int new_mtu)
        if (netif_running(ndev))
                return -EBUSY;
 
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
        netdev_update_features(ndev);
 
        return 0;
index 755db89..e097ce3 100644 (file)
@@ -1967,7 +1967,7 @@ static int rocker_port_change_mtu(struct net_device *dev, int new_mtu)
                rocker_port_stop(dev);
 
        netdev_info(dev, "MTU change from %d to %d\n", dev->mtu, new_mtu);
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        err = rocker_cmd_set_port_settings_mtu(rocker_port, new_mtu);
        if (err)
index ecbe399..12c8396 100644 (file)
@@ -1804,7 +1804,7 @@ static int sxgbe_set_features(struct net_device *dev,
  */
 static int sxgbe_change_mtu(struct net_device *dev, int new_mtu)
 {
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        if (!netif_running(dev))
                return 0;
index 551f890..4ebd5ae 100644 (file)
@@ -302,7 +302,7 @@ int efx_change_mtu(struct net_device *net_dev, int new_mtu)
        efx_stop_all(efx);
 
        mutex_lock(&efx->mac_lock);
-       net_dev->mtu = new_mtu;
+       WRITE_ONCE(net_dev->mtu, new_mtu);
        efx_mac_reconfigure(efx, true);
        mutex_unlock(&efx->mac_lock);
 
index 1cb32ae..8925745 100644 (file)
@@ -2125,7 +2125,7 @@ static int ef4_change_mtu(struct net_device *net_dev, int new_mtu)
        ef4_stop_all(efx);
 
        mutex_lock(&efx->mac_lock);
-       net_dev->mtu = new_mtu;
+       WRITE_ONCE(net_dev->mtu, new_mtu);
        ef4_mac_reconfigure(efx);
        mutex_unlock(&efx->mac_lock);
 
index 88e5bc3..cf19516 100644 (file)
@@ -306,7 +306,7 @@ int efx_siena_change_mtu(struct net_device *net_dev, int new_mtu)
        efx_siena_stop_all(efx);
 
        mutex_lock(&efx->mac_lock);
-       net_dev->mtu = new_mtu;
+       WRITE_ONCE(net_dev->mtu, new_mtu);
        efx_siena_mac_reconfigure(efx, true);
        mutex_unlock(&efx->mac_lock);
 
index 59bf839..3d82890 100644 (file)
@@ -5909,7 +5909,7 @@ static int stmmac_change_mtu(struct net_device *dev, int new_mtu)
                stmmac_set_rx_mode(dev);
        }
 
-       dev->mtu = mtu;
+       WRITE_ONCE(dev->mtu, mtu);
        netdev_update_features(dev);
 
        return 0;
index 8f1f43d..b8948d5 100644 (file)
@@ -3804,7 +3804,7 @@ static int cas_change_mtu(struct net_device *dev, int new_mtu)
 {
        struct cas *cp = netdev_priv(dev);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        if (!netif_running(dev) || !netif_device_present(dev))
                return 0;
 
index f68aa81..41a27ae 100644 (file)
@@ -6751,7 +6751,7 @@ static int niu_change_mtu(struct net_device *dev, int new_mtu)
        orig_jumbo = (dev->mtu > ETH_DATA_LEN);
        new_jumbo = (new_mtu > ETH_DATA_LEN);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        if (!netif_running(dev) ||
            (orig_jumbo == new_jumbo))
index 9bd1df8..4aa356e 100644 (file)
@@ -2499,7 +2499,7 @@ static int gem_change_mtu(struct net_device *dev, int new_mtu)
 {
        struct gem *gp = netdev_priv(dev);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        /* We'll just catch it later when the device is up'd or resumed */
        if (!netif_running(dev) || !netif_device_present(dev))
index 36b9488..d1793b6 100644 (file)
@@ -823,7 +823,7 @@ static int xlgmac_change_mtu(struct net_device *netdev, int mtu)
                return ret;
 
        pdata->rx_buf_size = ret;
-       netdev->mtu = mtu;
+       WRITE_ONCE(netdev->mtu, mtu);
 
        xlgmac_restart_dev(pdata);
 
index ca40951..ede5f78 100644 (file)
@@ -756,7 +756,7 @@ static int bdx_change_mtu(struct net_device *ndev, int new_mtu)
 {
        ENTER;
 
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
        if (netif_running(ndev)) {
                bdx_close(ndev);
                bdx_open(ndev);
index 1c6b2a9..55fff4d 100644 (file)
@@ -2294,7 +2294,7 @@ static int velocity_change_mtu(struct net_device *dev, int new_mtu)
        int ret = 0;
 
        if (!netif_running(dev)) {
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
                goto out_0;
        }
 
@@ -2336,7 +2336,7 @@ static int velocity_change_mtu(struct net_device *dev, int new_mtu)
                tmp_vptr->rx = rx;
                tmp_vptr->tx = tx;
 
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
 
                velocity_init_registers(vptr, VELOCITY_INIT_COLD);
 
index 945c13d..3662483 100644 (file)
@@ -1408,7 +1408,7 @@ int wx_change_mtu(struct net_device *netdev, int new_mtu)
 {
        struct wx *wx = netdev_priv(netdev);
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
        wx_set_rx_buffer_len(wx);
 
        return 0;
index aaf780f..c29809c 100644 (file)
@@ -1641,7 +1641,7 @@ static int axienet_change_mtu(struct net_device *ndev, int new_mtu)
                XAE_TRL_SIZE) > lp->rxmem)
                return -EINVAL;
 
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
 
        return 0;
 }
index e0d2614..8aff6a7 100644 (file)
@@ -1233,7 +1233,7 @@ static int ixp4xx_eth_change_mtu(struct net_device *dev, int new_mtu)
                        return ret;
        }
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        return 0;
 }
index 5fbe33a..6411da3 100644 (file)
@@ -811,7 +811,7 @@ static int fjes_change_mtu(struct net_device *netdev, int new_mtu)
                netif_tx_stop_all_queues(netdev);
        }
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        if (running) {
                for (epidx = 0; epidx < hw->max_epid; epidx++) {
index f918ca6..51495cb 100644 (file)
@@ -1059,7 +1059,7 @@ static int geneve_change_mtu(struct net_device *dev, int new_mtu)
        else if (new_mtu < dev->min_mtu)
                new_mtu = dev->min_mtu;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index 11831a1..4414224 100644 (file)
@@ -1233,14 +1233,14 @@ static int netvsc_change_mtu(struct net_device *ndev, int mtu)
        if (ret)
                goto rollback_vf;
 
-       ndev->mtu = mtu;
+       WRITE_ONCE(ndev->mtu, mtu);
 
        ret = netvsc_attach(ndev, device_info);
        if (!ret)
                goto out;
 
        /* Attempt rollback to original MTU */
-       ndev->mtu = orig_mtu;
+       WRITE_ONCE(ndev->mtu, orig_mtu);
 
        if (netvsc_attach(ndev, device_info))
                netdev_err(ndev, "restoring mtu failed\n");
index ff016c1..2da70bc 100644 (file)
@@ -3753,7 +3753,7 @@ static int macsec_change_mtu(struct net_device *dev, int new_mtu)
        if (macsec->real_dev->mtu - extra < new_mtu)
                return -ERANGE;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        return 0;
 }
index 0cec278..67b7ef2 100644 (file)
@@ -865,7 +865,7 @@ static int macvlan_change_mtu(struct net_device *dev, int new_mtu)
 
        if (vlan->lowerdev->mtu < new_mtu)
                return -EINVAL;
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index d0c916a..963d8b4 100644 (file)
@@ -231,7 +231,7 @@ static int net_failover_change_mtu(struct net_device *dev, int new_mtu)
                }
        }
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        return 0;
 }
index d127856..e3a385a 100644 (file)
@@ -74,7 +74,7 @@ static int nsim_change_mtu(struct net_device *dev, int new_mtu)
        if (ns->xdp.prog && new_mtu > NSIM_XDP_MAX_MTU)
                return -EBUSY;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        return 0;
 }
index 536bd65..ffe7f46 100644 (file)
@@ -306,7 +306,7 @@ static int ntb_netdev_change_mtu(struct net_device *ndev, int new_mtu)
                return -EINVAL;
 
        if (!netif_running(ndev)) {
-               ndev->mtu = new_mtu;
+               WRITE_ONCE(ndev->mtu, new_mtu);
                return 0;
        }
 
@@ -335,7 +335,7 @@ static int ntb_netdev_change_mtu(struct net_device *ndev, int new_mtu)
                }
        }
 
-       ndev->mtu = new_mtu;
+       WRITE_ONCE(ndev->mtu, new_mtu);
 
        ntb_transport_link_up(dev->qp);
 
index 0aba356..fb362ee 100644 (file)
@@ -286,7 +286,7 @@ static int sl_realloc_bufs(struct slip *sl, int mtu)
                }
        }
        sl->mtu      = mtu;
-       dev->mtu      = mtu;
+       WRITE_ONCE(dev->mtu, mtu);
        sl->buffsize = len;
        err = 0;
 
index 8c7dbaf..ab1935a 100644 (file)
@@ -1831,7 +1831,7 @@ static int team_change_mtu(struct net_device *dev, int new_mtu)
        team->port_mtu_change_allowed = false;
        mutex_unlock(&team->lock);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        return 0;
 
index 7b8afa5..74571c8 100644 (file)
@@ -424,7 +424,7 @@ static int aqc111_change_mtu(struct net_device *net, int new_mtu)
        u16 reg16 = 0;
        u8 buf[5];
 
-       net->mtu = new_mtu;
+       WRITE_ONCE(net->mtu, new_mtu);
        dev->hard_mtu = net->mtu + net->hard_header_len;
 
        aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE,
index f7cff58..57d6e5a 100644 (file)
@@ -1230,7 +1230,7 @@ static int ax88178_change_mtu(struct net_device *net, int new_mtu)
        if ((ll_mtu % dev->maxpacket) == 0)
                return -EDOM;
 
-       net->mtu = new_mtu;
+       WRITE_ONCE(net->mtu, new_mtu);
        dev->hard_mtu = net->mtu + net->hard_header_len;
        ax88178_set_mfb(dev);
 
index b25535a..c5196b5 100644 (file)
@@ -943,7 +943,7 @@ static int ax88179_change_mtu(struct net_device *net, int new_mtu)
        struct usbnet *dev = netdev_priv(net);
        u16 tmp16;
 
-       net->mtu = new_mtu;
+       WRITE_ONCE(net->mtu, new_mtu);
        dev->hard_mtu = net->mtu + net->hard_header_len;
 
        if (net->mtu > 1500) {
index db05622..bf76ecc 100644 (file)
@@ -798,7 +798,7 @@ int cdc_ncm_change_mtu(struct net_device *net, int new_mtu)
 {
        struct usbnet *dev = netdev_priv(net);
 
-       net->mtu = new_mtu;
+       WRITE_ONCE(net->mtu, new_mtu);
        cdc_ncm_set_dgram_size(dev, new_mtu + cdc_ncm_eth_hlen(dev));
 
        return 0;
index 0030be5..5a2c38b 100644 (file)
@@ -2528,7 +2528,7 @@ static int lan78xx_change_mtu(struct net_device *netdev, int new_mtu)
 
        ret = lan78xx_set_rx_max_frame_length(dev, max_frame_len);
        if (!ret)
-               netdev->mtu = new_mtu;
+               WRITE_ONCE(netdev->mtu, new_mtu);
 
        usb_autopm_put_interface(dev->intf);
 
index 51e9f5b..19df1cd 100644 (file)
@@ -9365,7 +9365,7 @@ static int rtl8152_change_mtu(struct net_device *dev, int new_mtu)
        case RTL_VER_01:
        case RTL_VER_02:
        case RTL_VER_07:
-               dev->mtu = new_mtu;
+               WRITE_ONCE(dev->mtu, new_mtu);
                return 0;
        default:
                break;
@@ -9377,7 +9377,7 @@ static int rtl8152_change_mtu(struct net_device *dev, int new_mtu)
 
        mutex_lock(&tp->control);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        if (netif_running(dev)) {
                if (tp->rtl_ops.change_mtu)
index f3f7f68..9fd516e 100644 (file)
@@ -398,7 +398,7 @@ int usbnet_change_mtu (struct net_device *net, int new_mtu)
        // no second zero-length packet read wanted after mtu-sized packets
        if ((ll_mtu % dev->maxpacket) == 0)
                return -EDOM;
-       net->mtu = new_mtu;
+       WRITE_ONCE(net->mtu, new_mtu);
 
        dev->hard_mtu = net->mtu + net->hard_header_len;
        if (dev->rx_urb_size == old_hard_mtu) {
index 0578864..89ca6e7 100644 (file)
@@ -3457,7 +3457,7 @@ vmxnet3_change_mtu(struct net_device *netdev, int new_mtu)
        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
        int err = 0;
 
-       netdev->mtu = new_mtu;
+       WRITE_ONCE(netdev->mtu, new_mtu);
 
        /*
         * Reset_work may be in the middle of resetting the device, wait for its
index a1ba516..4c26007 100644 (file)
@@ -58,7 +58,7 @@ static int vsockmon_change_mtu(struct net_device *dev, int new_mtu)
        if (!vsockmon_is_valid_mtu(new_mtu))
                return -EINVAL;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index 7e3a7d1..f78dd04 100644 (file)
@@ -3181,7 +3181,7 @@ static int vxlan_change_mtu(struct net_device *dev, int new_mtu)
                        return -EINVAL;
        }
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index 65db5f1..325fcb3 100644 (file)
@@ -358,7 +358,7 @@ static int xenvif_change_mtu(struct net_device *dev, int mtu)
 
        if (mtu > max)
                return -EINVAL;
-       dev->mtu = mtu;
+       WRITE_ONCE(dev->mtu, mtu);
        return 0;
 }
 
index 8d2aee8..4265c1c 100644 (file)
@@ -1376,7 +1376,7 @@ static int xennet_change_mtu(struct net_device *dev, int mtu)
 
        if (mtu > max)
                return -EINVAL;
-       dev->mtu = mtu;
+       WRITE_ONCE(dev->mtu, mtu);
        return 0;
 }
 
index 878fe3c..b93c2eb 100644 (file)
@@ -996,7 +996,7 @@ static int ctcm_change_mtu(struct net_device *dev, int new_mtu)
                        return -EINVAL;
                dev->hard_header_len = LL_HEADER_LENGTH + 2;
        }
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 
index 39876ef..3efba4f 100644 (file)
@@ -149,7 +149,7 @@ static int vlan_dev_change_mtu(struct net_device *dev, int new_mtu)
        if (max_mtu < new_mtu)
                return -ERANGE;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        return 0;
 }
index 89c51b3..30ecbc2 100644 (file)
@@ -159,7 +159,7 @@ static int batadv_interface_change_mtu(struct net_device *dev, int new_mtu)
        if (new_mtu < ETH_MIN_MTU || new_mtu > batadv_hardif_min_mtu(dev))
                return -EINVAL;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        bat_priv->mtu_set_by_user = new_mtu;
 
        return 0;
index ab4d33e..71b5000 100644 (file)
@@ -197,7 +197,7 @@ static int br_change_mtu(struct net_device *dev, int new_mtu)
 {
        struct net_bridge *br = netdev_priv(dev);
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        /* this flag will be cleared if the MTU was automatically adjusted */
        br_opt_toggle(br, BROPT_MTU_SET_BY_USER, true);
index c94b868..1f7b8f2 100644 (file)
@@ -2120,7 +2120,7 @@ int dsa_user_change_mtu(struct net_device *dev, int new_mtu)
        if (err)
                goto out_port_failed;
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        dsa_bridge_mtu_normalization(dp);
 
index 8612730..26d5282 100644 (file)
@@ -123,7 +123,7 @@ static int hsr_dev_change_mtu(struct net_device *dev, int new_mtu)
                return -EINVAL;
        }
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
 
        return 0;
 }
index 9756e65..d7ae324 100644 (file)
@@ -96,7 +96,7 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event,
                        break; /* Handled in ndo_change_mtu() */
                mtu_max = hsr_get_max_mtu(port->hsr);
                master = hsr_port_get_hsr(port->hsr, HSR_PT_MASTER);
-               master->dev->mtu = mtu_max;
+               WRITE_ONCE(master->dev->mtu, mtu_max);
                break;
        case NETDEV_UNREGISTER:
                if (!is_hsr_master(dev)) {
index c3af965..ba20547 100644 (file)
@@ -793,7 +793,7 @@ static void ipgre_link_update(struct net_device *dev, bool set_mtu)
                dev->needed_headroom += len;
 
        if (set_mtu)
-               dev->mtu = max_t(int, dev->mtu - len, 68);
+               WRITE_ONCE(dev->mtu, max_t(int, dev->mtu - len, 68));
 
        if (test_bit(IP_TUNNEL_SEQ_BIT, tunnel->parms.o_flags) ||
            (test_bit(IP_TUNNEL_CSUM_BIT, tunnel->parms.o_flags) &&
index f1c5f6c..bccef2f 100644 (file)
@@ -897,7 +897,7 @@ static void ip_tunnel_update(struct ip_tunnel_net *itn,
                t->fwmark = fwmark;
                mtu = ip_tunnel_bind_dev(dev);
                if (set_mtu)
-                       dev->mtu = mtu;
+                       WRITE_ONCE(dev->mtu, mtu);
        }
        dst_cache_reset(&t->dst_cache);
        netdev_state_change(dev);
@@ -1082,7 +1082,7 @@ int __ip_tunnel_change_mtu(struct net_device *dev, int new_mtu, bool strict)
                new_mtu = max_mtu;
        }
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 EXPORT_SYMBOL_GPL(__ip_tunnel_change_mtu);
index 5aec79c..9dee0c1 100644 (file)
@@ -1746,7 +1746,7 @@ int ip6_tnl_change_mtu(struct net_device *dev, int new_mtu)
                if (new_mtu > IP_MAX_MTU - dev->hard_header_len)
                        return -EINVAL;
        }
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }
 EXPORT_SYMBOL(ip6_tnl_change_mtu);
index 78344cf..590737c 100644 (file)
@@ -666,7 +666,8 @@ static void vti6_link_config(struct ip6_tnl *t, bool keep_mtu)
                dev->flags &= ~IFF_POINTOPOINT;
 
        if (keep_mtu && dev->mtu) {
-               dev->mtu = clamp(dev->mtu, dev->min_mtu, dev->max_mtu);
+               WRITE_ONCE(dev->mtu,
+                          clamp(dev->mtu, dev->min_mtu, dev->max_mtu));
                return;
        }
 
index 29850d0..8badec6 100644 (file)
@@ -424,7 +424,7 @@ static int teql_master_mtu(struct net_device *dev, int new_mtu)
                } while ((q = NEXT_SLAVE(q)) != m->slaves);
        }
 
-       dev->mtu = new_mtu;
+       WRITE_ONCE(dev->mtu, new_mtu);
        return 0;
 }