Since we have soalloc() to do common socket initialization, move the rest within. I mostly need to do this because standalone socket's buffer locking require to introduce another klistops data for buffers and there is no reason to add more copypaste to sonewconn().
Also this makes `socket_klistops' private to kern/uipc_socket.c Index: sys/kern/uipc_socket.c =================================================================== RCS file: /cvs/src/sys/kern/uipc_socket.c,v retrieving revision 1.299 diff -u -p -r1.299 uipc_socket.c --- sys/kern/uipc_socket.c 27 Jan 2023 21:01:59 -0000 1.299 +++ sys/kern/uipc_socket.c 31 Jan 2023 09:16:04 -0000 @@ -112,6 +112,16 @@ const struct filterops soexcept_filtops .f_process = filt_soprocess, }; +void klist_soassertlk(void *); +int klist_solock(void *); +void klist_sounlock(void *, int); + +const struct klistops socket_klistops = { + .klo_assertlk = klist_soassertlk, + .klo_lock = klist_solock, + .klo_unlock = klist_sounlock, +}; + #ifndef SOMINCONN #define SOMINCONN 80 #endif /* SOMINCONN */ @@ -148,6 +158,11 @@ soalloc(int wait) return (NULL); rw_init_flags(&so->so_lock, "solock", RWL_DUPOK); refcnt_init(&so->so_refcnt); + klist_init(&so->so_rcv.sb_klist, &socket_klistops, so); + klist_init(&so->so_snd.sb_klist, &socket_klistops, so); + sigio_init(&so->so_sigio); + TAILQ_INIT(&so->so_q0); + TAILQ_INIT(&so->so_q); return (so); } @@ -176,11 +191,6 @@ socreate(int dom, struct socket **aso, i if (prp->pr_type != type) return (EPROTOTYPE); so = soalloc(M_WAIT); - klist_init(&so->so_rcv.sb_klist, &socket_klistops, so); - klist_init(&so->so_snd.sb_klist, &socket_klistops, so); - sigio_init(&so->so_sigio); - TAILQ_INIT(&so->so_q0); - TAILQ_INIT(&so->so_q); so->so_type = type; if (suser(p) == 0) so->so_state = SS_PRIV; @@ -2333,12 +2343,6 @@ klist_sounlock(void *arg, int ls) sounlock(so); } - -const struct klistops socket_klistops = { - .klo_assertlk = klist_soassertlk, - .klo_lock = klist_solock, - .klo_unlock = klist_sounlock, -}; #ifdef DDB void Index: sys/kern/uipc_socket2.c =================================================================== RCS file: /cvs/src/sys/kern/uipc_socket2.c,v retrieving revision 1.134 diff -u -p -r1.134 uipc_socket2.c --- sys/kern/uipc_socket2.c 27 Jan 2023 18:46:34 -0000 1.134 +++ sys/kern/uipc_socket2.c 31 Jan 2023 09:16:04 -0000 @@ -41,7 +41,6 @@ #include <sys/socket.h> #include <sys/socketvar.h> #include <sys/signalvar.h> -#include <sys/event.h> #include <sys/pool.h> /* @@ -226,9 +225,6 @@ sonewconn(struct socket *head, int conns so->so_rcv.sb_lowat = head->so_rcv.sb_lowat; so->so_rcv.sb_timeo_nsecs = head->so_rcv.sb_timeo_nsecs; - klist_init(&so->so_rcv.sb_klist, &socket_klistops, so); - klist_init(&so->so_snd.sb_klist, &socket_klistops, so); - sigio_init(&so->so_sigio); sigio_copy(&so->so_sigio, &head->so_sigio); soqinsque(head, so, 0); Index: sys/sys/event.h =================================================================== RCS file: /cvs/src/sys/sys/event.h,v retrieving revision 1.67 diff -u -p -r1.67 event.h --- sys/sys/event.h 31 Mar 2022 01:41:22 -0000 1.67 +++ sys/sys/event.h 31 Jan 2023 09:16:04 -0000 @@ -286,7 +286,6 @@ struct timespec; extern const struct filterops sig_filtops; extern const struct filterops dead_filtops; -extern const struct klistops socket_klistops; extern void kqpoll_init(unsigned int); extern void kqpoll_done(unsigned int);