Patch "net: enetc: correct the statistics of rx bytes" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: enetc: correct the statistics of rx bytes

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-enetc-correct-the-statistics-of-rx-bytes.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit cb5a832ae2d32580ad2de97b56bbba7e11de7878
Author: Wei Fang <wei.fang@xxxxxxx>
Date:   Fri Jun 2 17:46:58 2023 +0800

    net: enetc: correct the statistics of rx bytes
    
    [ Upstream commit 7190d0ff0e17690a9b1279d84a06473600ba2060 ]
    
    The rx_bytes of struct net_device_stats should count the length of
    ethernet frames excluding the FCS. However, there are two problems
    with the rx_bytes statistics of the current enetc driver. one is
    that the length of VLAN header is not counted if the VLAN extraction
    feature is enabled. The other is that the length of L2 header is not
    counted, because eth_type_trans() is invoked before updating rx_bytes
    which will subtract the length of L2 header from skb->len.
    BTW, the rx_bytes statistics of XDP path also have similar problem,
    I will fix it in another patch.
    
    Fixes: a800abd3ecb9 ("net: enetc: move skb creation into enetc_build_skb")
    Signed-off-by: Wei Fang <wei.fang@xxxxxxx>
    Reviewed-by: Vladimir Oltean <vladimir.oltean@xxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
index 8b7c93447770c..e16bd2b7692f3 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
@@ -940,7 +940,13 @@ static int enetc_clean_rx_ring(struct enetc_bdr *rx_ring,
 		if (!skb)
 			break;
 
-		rx_byte_cnt += skb->len;
+		/* When set, the outer VLAN header is extracted and reported
+		 * in the receive buffer descriptor. So rx_byte_cnt should
+		 * add the length of the extracted VLAN header.
+		 */
+		if (bd_status & ENETC_RXBD_FLAG_VLAN)
+			rx_byte_cnt += VLAN_HLEN;
+		rx_byte_cnt += skb->len + ETH_HLEN;
 		rx_frm_cnt++;
 
 		napi_gro_receive(napi, skb);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux