Hi,

Convert struct unpcb malloc(9) to pool_get(9).

ok?

bluhm

Index: kern/uipc_proto.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/kern/uipc_proto.c,v
retrieving revision 1.17
diff -u -p -r1.17 uipc_proto.c
--- kern/uipc_proto.c   8 Apr 2018 18:57:39 -0000       1.17
+++ kern/uipc_proto.c   13 Jul 2019 17:00:55 -0000
@@ -79,6 +79,7 @@ struct protosw unixsw[] = {
 struct domain unixdomain = {
   .dom_family = AF_UNIX,
   .dom_name = "unix",
+  .dom_init = unp_init,
   .dom_externalize = unp_externalize,
   .dom_dispose = unp_dispose,
   .dom_protosw = unixsw,
Index: kern/uipc_usrreq.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/kern/uipc_usrreq.c,v
retrieving revision 1.140
diff -u -p -r1.140 uipc_usrreq.c
--- kern/uipc_usrreq.c  24 May 2019 15:17:29 -0000      1.140
+++ kern/uipc_usrreq.c  13 Jul 2019 17:01:47 -0000
@@ -50,6 +50,7 @@
 #include <sys/mbuf.h>
 #include <sys/task.h>
 #include <sys/pledge.h>
+#include <sys/pool.h>

 void   uipc_setaddr(const struct unpcb *, struct mbuf *);

@@ -72,6 +73,7 @@ void  unp_mark(struct fdpass *, int);
 void   unp_scan(struct mbuf *, void (*)(struct fdpass *, int));
 int    unp_nam2sun(struct mbuf *, struct sockaddr_un **, size_t *);

+struct pool unpcb_pool;
 /* list of sets of files that were sent over sockets that are now closed */
 SLIST_HEAD(,unp_deferral) unp_deferred = SLIST_HEAD_INITIALIZER(unp_deferred);

@@ -90,6 +92,13 @@ struct       sockaddr sun_noname = { sizeof(su
 ino_t  unp_ino;                        /* prototype for fake inode numbers */

 void
+unp_init(void)
+{
+       pool_init(&unpcb_pool, sizeof(struct unpcb), 0,
+           IPL_NONE, 0, "unpcb", NULL);
+}
+
+void
 uipc_setaddr(const struct unpcb *unp, struct mbuf *nam)
 {
        if (unp != NULL && unp->unp_addr != NULL) {
@@ -370,7 +379,7 @@ uipc_attach(struct socket *so, int proto
                if (error)
                        return (error);
        }
-       unp = malloc(sizeof(*unp), M_PCB, M_NOWAIT|M_ZERO);
+       unp = pool_get(&unpcb_pool, PR_NOWAIT|PR_ZERO);
        if (unp == NULL)
                return (ENOBUFS);
        unp->unp_socket = so;
@@ -414,7 +423,7 @@ unp_detach(struct unpcb *unp)
        soisdisconnected(unp->unp_socket);
        unp->unp_socket->so_pcb = NULL;
        m_freem(unp->unp_addr);
-       free(unp, M_PCB, sizeof *unp);
+       pool_put(&unpcb_pool, unp);
        if (unp_rights)
                task_add(systq, &unp_gc_task);
 }
@@ -638,7 +647,7 @@ unp_drop(struct unpcb *unp, int errno)
                 */
                sofree(so, SL_NOUNLOCK);
                m_freem(unp->unp_addr);
-               free(unp, M_PCB, sizeof *unp);
+               pool_put(&unpcb_pool, unp);
        }
 }

Index: sys/unpcb.h
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/sys/unpcb.h,v
retrieving revision 1.16
diff -u -p -r1.16 unpcb.h
--- sys/unpcb.h 2 Nov 2017 14:01:18 -0000       1.16
+++ sys/unpcb.h 13 Jul 2019 17:00:55 -0000
@@ -96,6 +96,7 @@ int   uipc_usrreq(struct socket *, int , s
 int    uipc_attach(struct socket *, int);
 int    uipc_detach(struct socket *);

+void   unp_init(void);
 int    unp_bind(struct unpcb *, struct mbuf *, struct proc *);
 int    unp_connect(struct socket *, struct mbuf *, struct proc *);
 int    unp_connect2(struct socket *, struct socket *);

Reply via email to