From b6583cc4b604dc1f5e6ffc23fc1c52caa195941d Mon Sep 17 00:00:00 2001 From: Felipe Moura Date: Sun, 16 Aug 2026 17:28:55 -0300 Subject: [PATCH] net/arp: release the device lock before waiting for a resolution The -EINPROGRESS path jumps over the netdev_unlock() below it, so the caller waits holding d_lock. The receive path needs that same lock to dispatch the ARP reply, and the interface stalls for good. Assisted-by: Claude Code:claude-opus-5 Signed-off-by: Felipe Moura --- net/arp/arp_send.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/net/arp/arp_send.c b/net/arp/arp_send.c index 5f97a9807b0..01c5e5bb80b 100644 --- a/net/arp/arp_send.c +++ b/net/arp/arp_send.c @@ -328,8 +328,13 @@ int arp_send(in_addr_t ipaddr) { /* ARP request for the same destination is in progress, directly * wait arp response notify. + * + * Drop the device lock: this path skips the netdev_unlock() + * below, and the receive path needs that same lock to deliver + * the reply. The waiter above is already installed. */ + netdev_unlock(dev); goto wait; }