Index: sys/kern/subr_pool.c =================================================================== RCS file: /cvsroot/src/sys/kern/subr_pool.c,v retrieving revision 1.219 diff -p -u -r1.219 subr_pool.c --- sys/kern/subr_pool.c 16 Dec 2017 03:13:29 -0000 1.219 +++ sys/kern/subr_pool.c 27 Dec 2017 03:45:47 -0000 @@ -212,7 +212,7 @@ static void pool_cache_invalidate_groups static void pool_cache_invalidate_cpu(pool_cache_t, u_int); static void pool_cache_transfer(pool_cache_t); -static int pool_catchup(struct pool *); +static int pool_catchup(struct pool *, int); static void pool_prime_page(struct pool *, void *, struct pool_item_header *); static void pool_update_curpage(struct pool *); @@ -916,7 +916,7 @@ pool_get(struct pool *pp, int flags) * If we have a low water mark and we are now below that low * water mark, add more items to the pool. */ - if (POOL_NEEDS_CATCHUP(pp) && pool_catchup(pp) != 0) { + if (POOL_NEEDS_CATCHUP(pp) && pool_catchup(pp, flags) != 0) { /* * XXX: Should we log a warning? Should we set up a timeout * to try again in a second or so? The latter could break @@ -1244,17 +1244,14 @@ pool_prime_page(struct pool *pp, void *s * with it locked. */ static int -pool_catchup(struct pool *pp) +pool_catchup(struct pool *pp, int flags) { int error = 0; while (POOL_NEEDS_CATCHUP(pp)) { - error = pool_grow(pp, PR_NOWAIT); - if (error) { - if (error == ERESTART) - continue; + error = pool_grow(pp, flags); + if (error) break; - } } return error; } @@ -1283,7 +1280,7 @@ pool_setlowat(struct pool *pp, int n) : roundup(n, pp->pr_itemsperpage) / pp->pr_itemsperpage; /* Make sure we're caught up with the newly-set low water mark. */ - if (POOL_NEEDS_CATCHUP(pp) && pool_catchup(pp) != 0) { + if (POOL_NEEDS_CATCHUP(pp) && pool_catchup(pp, PR_WAITOK) != 0) { /* * XXX: Should we log a warning? Should we set up a timeout * to try again in a second or so? The latter could break