Download raw body.
Take solock_shared() in soo_stat()
On Wed, Apr 10, 2024 at 04:09:00PM +0300, Vitaliy Makkoveev wrote: > Only unix(4) and tcp(4) sockets set (*pru_sence)() handler. The rest of > soo_stat() is the read only access. > > solock() can't be pushed down to PCB layer because tcp(4) `so_rcv' still > relies on it. OK bluhm@ > Index: sys/kern/sys_socket.c > =================================================================== > RCS file: /cvs/src/sys/kern/sys_socket.c,v > retrieving revision 1.63 > diff -u -p -r1.63 sys_socket.c > --- sys/kern/sys_socket.c 31 Mar 2024 13:50:00 -0000 1.63 > +++ sys/kern/sys_socket.c 10 Apr 2024 13:06:26 -0000 > @@ -145,7 +145,7 @@ soo_stat(struct file *fp, struct stat *u > > memset(ub, 0, sizeof (*ub)); > ub->st_mode = S_IFSOCK; > - solock(so); > + solock_shared(so); > mtx_enter(&so->so_rcv.sb_mtx); > if ((so->so_rcv.sb_state & SS_CANTRCVMORE) == 0 || > so->so_rcv.sb_cc != 0) > @@ -156,7 +156,7 @@ soo_stat(struct file *fp, struct stat *u > ub->st_uid = so->so_euid; > ub->st_gid = so->so_egid; > (void)pru_sense(so, ub); > - sounlock(so); > + sounlock_shared(so); > return (0); > } >
Take solock_shared() in soo_stat()