Switch `so_snd' of udp(4) sockets to the new locking scheme.
authormvs <mvs@openbsd.org>
Fri, 12 Jul 2024 17:20:18 +0000 (17:20 +0000)
committermvs <mvs@openbsd.org>
Fri, 12 Jul 2024 17:20:18 +0000 (17:20 +0000)
commitac42138b096e513ab6ef1d1b78cf9b7436f66d2c
tree44f22ccd861fe1d54e8d919c34f2fbc6ac75921b
parent003dbb67f996f35af9baf66ec7469d1e3f483a17
Switch `so_snd' of udp(4) sockets to the new locking scheme.

udp_send() and following udp{,6}_output() do not append packets to
`so_snd' socket buffer. This mean the sosend() and sosplice() sending
paths are dummy pru_send() and there is no problems to simultaneously
run them on the same socket.

Push shared solock() deep down to sesend() and take it only around
pru_send(), but keep somove() running unedr exclusive solock(). Since
sosend() doesn't modify `so_snd' the unlocked `so_snd' space checks
within somove() are safe. Corresponding `sb_state' and `sb_flags'
modifications are protected by `sb_mtx' mutex(9).

Tested and OK bluhm.
sys/kern/uipc_socket.c
sys/kern/uipc_socket2.c
sys/miscfs/fifofs/fifo_vnops.c
sys/net/rtsock.c
sys/nfs/nfs_socket.c
sys/sys/socketvar.h