David Bidner, le mer. 07 oct. 2026 06:11:02 +0200, a ecrit:
> Ethernet receive threads and loopback sends can enqueue packets at the
> same time: they hold different locks,

? They don't?

loopback_xmit() assumes that net_bh_lock() is already taken, and
ethernet_demuxer takes it.

> and the skb queue spinlocks are no-ops on Hurd.

Yes, because we essentially run the whole tcp/ip stack single-threaded
from net_bh_worker().

> Concurrent updates can corrupt the receive backlog, causing packet
> loss and TCP timeouts.

I have never observed such a thing. Did you really observe it? How?

> Add backlog_lock to protect the queue and netdev_dropping in netif_rx(),
> net_bh() and dev_clear_backlog().

“I had a problem, so I added a lock.
Now I have two problems: a deadlock and a race condition.”

More seriously, net_bh_lock should already be the mutex that you are
looking for, that protects the backlog without blocking RPCs.

Samuel

Reply via email to