at the moment pages can be freed on a pool_put call and from the gc.

it is a bit unfair that pool_get may end up doing the heavy lifting
of allocating a pool page and pool_put wont have to do an equivalent
free, but we should try and minimise the amount of work done in
these hot paths.

ok?

Index: subr_pool.c
===================================================================
RCS file: /cvs/src/sys/kern/subr_pool.c,v
retrieving revision 1.204
diff -u -p -r1.204 subr_pool.c
--- subr_pool.c 21 Nov 2016 01:44:06 -0000      1.204
+++ subr_pool.c 22 Nov 2016 02:43:23 -0000
@@ -707,7 +707,7 @@ void
 pool_put(struct pool *pp, void *v)
 {
        struct pool_item *pi = v;
-       struct pool_page_header *ph, *freeph = NULL;
+       struct pool_page_header *ph;
 
 #ifdef DIAGNOSTIC
        if (v == NULL)
@@ -770,17 +770,7 @@ pool_put(struct pool *pp, void *v)
        pp->pr_nout--;
        pp->pr_nput++;
 
-       /* is it time to free a page? */
-       if (pp->pr_nidle > pp->pr_maxpages &&
-           (ph = TAILQ_FIRST(&pp->pr_emptypages)) != NULL &&
-           (ticks - ph->ph_tick) > (hz * pool_wait_free)) {
-               freeph = ph;
-               pool_p_remove(pp, freeph);
-       }
        mtx_leave(&pp->pr_mtx);
-
-       if (freeph != NULL)
-               pool_p_free(pp, freeph);
 
        if (!TAILQ_EMPTY(&pp->pr_requests)) {
                mtx_enter(&pp->pr_requests_mtx);

Reply via email to