]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: usb: lan78xx: fix TX byte statistics for small packets
authorOleksij Rempel <o.rempel@pengutronix.de>
Thu, 5 Mar 2026 14:34:27 +0000 (15:34 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 10 Mar 2026 02:48:33 +0000 (19:48 -0700)
Account for hardware auto-padding in TX byte counters to reflect actual
wire traffic.

The LAN7850 hardware automatically pads undersized frames to the minimum
Ethernet frame length (ETH_ZLEN, 60 bytes). However, the driver tracks
the network statistics based on the unpadded socket buffer length. This
results in the tx_bytes counter under-reporting the actual physical
bytes placed on the Ethernet wire for small packets (like short ARP or
ICMP requests).

Use max_t() to ensure the transmission statistics accurately account for
the hardware-generated padding.

Fixes: d383216a7efe ("lan78xx: Introduce Tx URB processing improvements")
Cc: stable@vger.kernel.org
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://patch.msgid.link/20260305143429.530909-3-o.rempel@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/usb/lan78xx.c

index 1c8f6919037881e3e1e656d083331e829f9a16a7..507dbcf3b7b0fa5a524ff28bddffc0acea1d82aa 100644 (file)
@@ -4178,7 +4178,7 @@ static struct skb_data *lan78xx_tx_buf_fill(struct lan78xx_net *dev,
                }
 
                tx_data += len;
-               entry->length += len;
+               entry->length += max_t(unsigned int, len, ETH_ZLEN);
                entry->num_of_packet += skb_shinfo(skb)->gso_segs ?: 1;
 
                dev_kfree_skb_any(skb);