* [PATCH net v3] net: usbnet: Fix the wrong netif_carrier_on() call
@ 2025-08-06 0:31 Ammar Faizi
2025-08-06 19:54 ` Simon Horman
0 siblings, 1 reply; 2+ messages in thread
From: Ammar Faizi @ 2025-08-06 0:31 UTC (permalink / raw)
To: Oliver Neukum, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Linus Torvalds, Paolo Abeni
Cc: Ammar Faizi, Simon Horman, John Ernberg, Greg Kroah-Hartman,
Linux Netdev Mailing List, Linux USB Mailing List,
Linux Kernel Mailing List, Armando Budianto, gwml, stable
The commit referenced in the Fixes tag causes usbnet to malfunction
(identified via git bisect). Post-commit, my external RJ45 LAN cable
fails to connect. Linus also reported the same issue after pulling that
commit.
The code has a logic error: netif_carrier_on() is only called when the
link is already on. Fix this by moving the netif_carrier_on() call
outside the if-statement entirely. This ensures it is always called
when EVENT_LINK_CARRIER_ON is set and properly clears it regardless
of the link state.
Cc: stable@vger.kernel.org
Cc: Armando Budianto <sprite@gnuweeb.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/all/CAHk-=wjqL4uF0MG_c8+xHX1Vv8==sPYQrtzbdA3kzi96284nuQ@mail.gmail.com
Closes: https://lore.kernel.org/netdev/CAHk-=wjKh8X4PT_mU1kD4GQrbjivMfPn-_hXa6han_BTDcXddw@mail.gmail.com
Closes: https://lore.kernel.org/netdev/0752dee6-43d6-4e1f-81d2-4248142cccd2@gnuweeb.org
Fixes: 0d9cfc9b8cb1 ("net: usbnet: Avoid potential RCU stall on LINK_CHANGE event")
Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org>
---
v3:
- Move the netif_carrier_on() call outside of the if-statement
entirely (Linus).
v2:
- Rebase on top of the latest netdev/net tree. The previous patch was
based on 0d9cfc9b8cb1. Line numbers have changed since then.
Link: https://lore.gnuweeb.org/gwml/20250801190310.58443-1-ammarfaizi2@gnuweeb.org
drivers/net/usb/usbnet.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index a38ffbf4b3f0..511c4154cf74 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1113,32 +1113,32 @@ static const struct ethtool_ops usbnet_ethtool_ops = {
.set_link_ksettings = usbnet_set_link_ksettings_mii,
};
/*-------------------------------------------------------------------------*/
static void __handle_link_change(struct usbnet *dev)
{
if (!test_bit(EVENT_DEV_OPEN, &dev->flags))
return;
+ if (test_and_clear_bit(EVENT_LINK_CARRIER_ON, &dev->flags))
+ netif_carrier_on(dev->net);
+
if (!netif_carrier_ok(dev->net)) {
/* kill URBs for reading packets to save bus bandwidth */
unlink_urbs(dev, &dev->rxq);
/*
* tx_timeout will unlink URBs for sending packets and
* tx queue is stopped by netcore after link becomes off
*/
} else {
- if (test_and_clear_bit(EVENT_LINK_CARRIER_ON, &dev->flags))
- netif_carrier_on(dev->net);
-
/* submitting URBs for reading packets */
queue_work(system_bh_wq, &dev->bh_work);
}
/* hard_mtu or rx_urb_size may change during link change */
usbnet_update_max_qlen(dev);
clear_bit(EVENT_LINK_CHANGE, &dev->flags);
}
--
Ammar Faizi
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH net v3] net: usbnet: Fix the wrong netif_carrier_on() call
2025-08-06 0:31 [PATCH net v3] net: usbnet: Fix the wrong netif_carrier_on() call Ammar Faizi
@ 2025-08-06 19:54 ` Simon Horman
0 siblings, 0 replies; 2+ messages in thread
From: Simon Horman @ 2025-08-06 19:54 UTC (permalink / raw)
To: Ammar Faizi
Cc: Oliver Neukum, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Linus Torvalds, Paolo Abeni, John Ernberg,
Greg Kroah-Hartman, Linux Netdev Mailing List,
Linux USB Mailing List, Linux Kernel Mailing List,
Armando Budianto, gwml, stable
On Wed, Aug 06, 2025 at 07:31:05AM +0700, Ammar Faizi wrote:
> The commit referenced in the Fixes tag causes usbnet to malfunction
> (identified via git bisect). Post-commit, my external RJ45 LAN cable
> fails to connect. Linus also reported the same issue after pulling that
> commit.
>
> The code has a logic error: netif_carrier_on() is only called when the
> link is already on. Fix this by moving the netif_carrier_on() call
> outside the if-statement entirely. This ensures it is always called
> when EVENT_LINK_CARRIER_ON is set and properly clears it regardless
> of the link state.
>
> Cc: stable@vger.kernel.org
> Cc: Armando Budianto <sprite@gnuweeb.org>
> Reviewed-by: Simon Horman <horms@kernel.org>
> Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
> Link: https://lore.kernel.org/all/CAHk-=wjqL4uF0MG_c8+xHX1Vv8==sPYQrtzbdA3kzi96284nuQ@mail.gmail.com
> Closes: https://lore.kernel.org/netdev/CAHk-=wjKh8X4PT_mU1kD4GQrbjivMfPn-_hXa6han_BTDcXddw@mail.gmail.com
> Closes: https://lore.kernel.org/netdev/0752dee6-43d6-4e1f-81d2-4248142cccd2@gnuweeb.org
> Fixes: 0d9cfc9b8cb1 ("net: usbnet: Avoid potential RCU stall on LINK_CHANGE event")
> Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org>
FTR, this patch was applied directly by Linus:
- net: usbnet: Fix the wrong netif_carrier_on() call
https://git.kernel.org/torvalds/c/8466d393700f
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-08-06 19:54 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-06 0:31 [PATCH net v3] net: usbnet: Fix the wrong netif_carrier_on() call Ammar Faizi
2025-08-06 19:54 ` Simon Horman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox