Index: sys/kern/subr_pool.c =================================================================== RCS file: /cvsroot/src/sys/kern/subr_pool.c,v retrieving revision 1.210 diff -p -u -r1.210 subr_pool.c --- sys/kern/subr_pool.c 5 Nov 2017 07:49:45 -0000 1.210 +++ sys/kern/subr_pool.c 6 Nov 2017 16:45:22 -0000 @@ -805,6 +805,7 @@ pool_get(struct pool *pp, int flags) pp->pr_nfail++; mutex_exit(&pp->pr_lock); + KASSERT((flags & (PR_WAITOK|PR_NOWAIT)) == PR_NOWAIT); return (NULL); } @@ -848,6 +849,7 @@ pool_get(struct pool *pp, int flags) pp->pr_nfail++; mutex_exit(&pp->pr_lock); + KASSERT((flags & (PR_WAITOK|PR_NOWAIT)) == PR_NOWAIT); return (NULL); } @@ -2181,8 +2183,10 @@ pool_cache_get_slow(pool_cache_cpu_t *cc object = pool_get(&pc->pc_pool, flags); *objectp = object; - if (__predict_false(object == NULL)) + if (__predict_false(object == NULL)) { + KASSERT((flags & (PR_WAITOK|PR_NOWAIT)) == PR_NOWAIT); return false; + } if (__predict_false((*pc->pc_ctor)(pc->pc_arg, object, flags) != 0)) { pool_put(&pc->pc_pool, object); @@ -2273,6 +2277,11 @@ pool_cache_get_paddr(pool_cache_t pc, in break; } + /* + * We would like to KASSERT(object || (flags & PR_NOWAIT)), but + * pool_cache_get can fail even in the PR_WAITOK case, if the + * constructor fails. + */ return object; }