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);

Reply via email to