Index: dev/dmover/dmover_io.c
===================================================================
RCS file: /cvsroot/src/sys/dev/dmover/dmover_io.c,v
retrieving revision 1.45
diff -u -p -u -r1.45 dmover_io.c
--- dev/dmover/dmover_io.c	30 Nov 2017 20:25:55 -0000	1.45
+++ dev/dmover/dmover_io.c	10 Feb 2019 17:04:45 -0000
@@ -180,9 +180,7 @@ dmio_state_get(void)
 {
 	struct dmio_state *ds;
 
-	ds = pool_get(&dmio_state_pool, PR_WAITOK);
-
-	memset(ds, 0, sizeof(*ds));
+	ds = pool_get(&dmio_state_pool, PR_WAITOK | PR_ZERO);
 
 	getnanotime(&ds->ds_btime);
 	ds->ds_atime = ds->ds_mtime = ds->ds_btime;
Index: dev/ic/ncr53c9x.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/ncr53c9x.c,v
retrieving revision 1.150
diff -u -p -u -r1.150 ncr53c9x.c
--- dev/ic/ncr53c9x.c	3 Feb 2019 03:19:27 -0000	1.150
+++ dev/ic/ncr53c9x.c	10 Feb 2019 17:04:45 -0000
@@ -843,12 +843,8 @@ ncr53c9x_get_ecb(struct ncr53c9x_softc *
 	int s;
 
 	s = splbio();
-	ecb = pool_get(&ecb_pool, PR_NOWAIT);
+	ecb = pool_get(&ecb_pool, PR_NOWAIT | PR_ZERO);
 	splx(s);
-	if (ecb) {
-		memset(ecb, 0, sizeof(*ecb));
-		ecb->flags |= ECB_ALLOC;
-	}
 	return ecb;
 }
 
Index: dev/ic/wd33c93.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/wd33c93.c,v
retrieving revision 1.27
diff -u -p -u -r1.27 wd33c93.c
--- dev/ic/wd33c93.c	8 Feb 2018 09:05:19 -0000	1.27
+++ dev/ic/wd33c93.c	10 Feb 2019 17:04:45 -0000
@@ -570,7 +570,7 @@ wd33c93_scsi_request(struct scsipi_chann
 			panic("wd33c93_scsicmd: busy");
 
 		s = splbio();
-		acb = (struct wd33c93_acb *)pool_get(&wd33c93_pool, PR_NOWAIT);
+		acb = pool_get(&wd33c93_pool, PR_NOWAIT);
 		splx(s);
 
 		if (acb == NULL) {
Index: dev/raidframe/rf_alloclist.c
===================================================================
RCS file: /cvsroot/src/sys/dev/raidframe/rf_alloclist.c,v
retrieving revision 1.27
diff -u -p -u -r1.27 rf_alloclist.c
--- dev/raidframe/rf_alloclist.c	9 Feb 2019 03:33:59 -0000	1.27
+++ dev/raidframe/rf_alloclist.c	10 Feb 2019 17:04:45 -0000
@@ -122,9 +122,5 @@ rf_FreeAllocList(RF_AllocListElem_t *l)
 RF_AllocListElem_t *
 rf_real_MakeAllocList(void)
 {
-	RF_AllocListElem_t *p;
-
-	p = pool_get(&rf_pools.alloclist, PR_WAITOK);
-	memset(p, 0, sizeof(*p));
-	return (p);
+	return pool_get(&rf_pools.alloclist, PR_WAITOK | PR_ZERO);
 }
Index: dev/raidframe/rf_callback.c
===================================================================
RCS file: /cvsroot/src/sys/dev/raidframe/rf_callback.c,v
retrieving revision 1.22
diff -u -p -u -r1.22 rf_callback.c
--- dev/raidframe/rf_callback.c	15 Mar 2009 17:17:23 -0000	1.22
+++ dev/raidframe/rf_callback.c	10 Feb 2019 17:04:45 -0000
@@ -71,10 +71,7 @@ rf_ConfigureCallback(RF_ShutdownList_t *
 RF_CallbackDesc_t *
 rf_AllocCallbackDesc(void)
 {
-	RF_CallbackDesc_t *p;
-
-	p = pool_get(&rf_pools.callback, PR_WAITOK);
-	return (p);
+	return pool_get(&rf_pools.callback, PR_WAITOK);
 }
 
 void
Index: dev/raidframe/rf_dagutils.c
===================================================================
RCS file: /cvsroot/src/sys/dev/raidframe/rf_dagutils.c,v
retrieving revision 1.55
diff -u -p -u -r1.55 rf_dagutils.c
--- dev/raidframe/rf_dagutils.c	9 Feb 2019 03:34:00 -0000	1.55
+++ dev/raidframe/rf_dagutils.c	10 Feb 2019 17:04:45 -0000
@@ -254,11 +254,7 @@ rf_ConfigureDAGs(RF_ShutdownList_t **lis
 RF_DagHeader_t *
 rf_AllocDAGHeader(void)
 {
-	RF_DagHeader_t *dh;
-
-	dh = pool_get(&rf_pools.dagh, PR_WAITOK);
-	memset(dh, 0, sizeof(*dh));
-	return (dh);
+	return pool_get(&rf_pools.dagh, PR_WAITOK | PR_ZERO);
 }
 
 void
@@ -270,11 +266,7 @@ rf_FreeDAGHeader(RF_DagHeader_t * dh)
 RF_DagNode_t *
 rf_AllocDAGNode(void)
 {
-	RF_DagNode_t *node;
-
-	node = pool_get(&rf_pools.dagnode, PR_WAITOK);
-	memset(node, 0, sizeof(*node));
-	return (node);
+	return pool_get(&rf_pools.dagnode, PR_WAITOK | PR_ZERO);
 }
 
 void
@@ -292,12 +284,7 @@ rf_FreeDAGNode(RF_DagNode_t *node)
 RF_DagList_t *
 rf_AllocDAGList(void)
 {
-	RF_DagList_t *dagList;
-
-	dagList = pool_get(&rf_pools.daglist, PR_WAITOK);
-	memset(dagList, 0, sizeof(*dagList));
-
-	return (dagList);
+	return pool_get(&rf_pools.daglist, PR_WAITOK | PR_ZERO);
 }
 
 void
@@ -309,11 +296,7 @@ rf_FreeDAGList(RF_DagList_t *dagList)
 void *
 rf_AllocDAGPCache(void)
 {
-	void *p;
-	p = pool_get(&rf_pools.dagpcache, PR_WAITOK);
-	memset(p, 0, RF_DAGPCACHE_SIZE);
-
-	return (p);
+	return pool_get(&rf_pools.dagpcache, PR_WAITOK | PR_ZERO);
 }
 
 void
@@ -325,12 +308,7 @@ rf_FreeDAGPCache(void *p)
 RF_FuncList_t *
 rf_AllocFuncList(void)
 {
-	RF_FuncList_t *funcList;
-
-	funcList = pool_get(&rf_pools.funclist, PR_WAITOK);
-	memset(funcList, 0, sizeof(*funcList));
-
-	return (funcList);
+	return pool_get(&rf_pools.funclist, PR_WAITOK | PR_ZERO);
 }
 
 void
Index: dev/raidframe/rf_diskqueue.c
===================================================================
RCS file: /cvsroot/src/sys/dev/raidframe/rf_diskqueue.c,v
retrieving revision 1.54
diff -u -p -u -r1.54 rf_diskqueue.c
--- dev/raidframe/rf_diskqueue.c	9 Feb 2019 03:34:00 -0000	1.54
+++ dev/raidframe/rf_diskqueue.c	10 Feb 2019 17:04:45 -0000
@@ -367,11 +367,10 @@ rf_CreateDiskQueueData(RF_IoType_t typ, 
 {
 	RF_DiskQueueData_t *p;
 
-	p = pool_get(&rf_pools.dqd, waitflag);
+	p = pool_get(&rf_pools.dqd, waitflag | PR_ZERO);
 	if (p == NULL)
 		return (NULL);
 
-	memset(p, 0, sizeof(*p));
 	if (waitflag == PR_WAITOK) {
 		p->bp = getiobuf(NULL, true);
 	} else {
Index: dev/raidframe/rf_map.c
===================================================================
RCS file: /cvsroot/src/sys/dev/raidframe/rf_map.c,v
retrieving revision 1.48
diff -u -p -u -r1.48 rf_map.c
--- dev/raidframe/rf_map.c	9 Feb 2019 03:34:00 -0000	1.48
+++ dev/raidframe/rf_map.c	10 Feb 2019 17:04:45 -0000
@@ -376,12 +376,7 @@ rf_ConfigureMapModule(RF_ShutdownList_t 
 RF_AccessStripeMapHeader_t *
 rf_AllocAccessStripeMapHeader(void)
 {
-	RF_AccessStripeMapHeader_t *p;
-
-	p = pool_get(&rf_pools.asm_hdr, PR_WAITOK);
-	memset(p, 0, sizeof(*p));
-
-	return (p);
+	return pool_get(&rf_pools.asm_hdr, PR_WAITOK | PR_ZERO);
 }
 
 void
@@ -394,12 +389,7 @@ rf_FreeAccessStripeMapHeader(RF_AccessSt
 RF_VoidFunctionPointerListElem_t *
 rf_AllocVFPListElem(void)
 {
-	RF_VoidFunctionPointerListElem_t *p;
-
-	p = pool_get(&rf_pools.vfple, PR_WAITOK);
-	memset(p, 0, sizeof(*p));
-
-	return (p);
+	return pool_get(&rf_pools.vfple, PR_WAITOK | PR_ZERO);
 }
 
 void
@@ -413,12 +403,7 @@ rf_FreeVFPListElem(RF_VoidFunctionPointe
 RF_VoidPointerListElem_t *
 rf_AllocVPListElem(void)
 {
-	RF_VoidPointerListElem_t *p;
-
-	p = pool_get(&rf_pools.vple, PR_WAITOK);
-	memset(p, 0, sizeof(*p));
-
-	return (p);
+	return pool_get(&rf_pools.vple, PR_WAITOK | PR_ZERO);
 }
 
 void
@@ -431,12 +416,7 @@ rf_FreeVPListElem(RF_VoidPointerListElem
 RF_ASMHeaderListElem_t *
 rf_AllocASMHeaderListElem(void)
 {
-	RF_ASMHeaderListElem_t *p;
-
-	p = pool_get(&rf_pools.asmhle, PR_WAITOK);
-	memset(p, 0, sizeof(*p));
-
-	return (p);
+	return pool_get(&rf_pools.asmhle, PR_WAITOK | PR_ZERO);
 }
 
 void
@@ -449,12 +429,7 @@ rf_FreeASMHeaderListElem(RF_ASMHeaderLis
 RF_FailedStripe_t *
 rf_AllocFailedStripeStruct(void)
 {
-	RF_FailedStripe_t *p;
-
-	p = pool_get(&rf_pools.fss, PR_WAITOK);
-	memset(p, 0, sizeof(*p));
-
-	return (p);
+	return pool_get(&rf_pools.fss, PR_WAITOK | PR_ZERO);
 }
 
 void
@@ -470,12 +445,7 @@ rf_FreeFailedStripeStruct(RF_FailedStrip
 RF_PhysDiskAddr_t *
 rf_AllocPhysDiskAddr(void)
 {
-	RF_PhysDiskAddr_t *p;
-
-	p = pool_get(&rf_pools.pda, PR_WAITOK);
-	memset(p, 0, sizeof(*p));
-
-	return (p);
+	return pool_get(&rf_pools.pda, PR_WAITOK | PR_ZERO);
 }
 /* allocates a list of PDAs, locking the free list only once when we
  * have to call calloc, we do it one component at a time to simplify
Index: dev/raidframe/rf_psstatus.c
===================================================================
RCS file: /cvsroot/src/sys/dev/raidframe/rf_psstatus.c,v
retrieving revision 1.35
diff -u -p -u -r1.35 rf_psstatus.c
--- dev/raidframe/rf_psstatus.c	9 Feb 2019 03:34:00 -0000	1.35
+++ dev/raidframe/rf_psstatus.c	10 Feb 2019 17:04:45 -0000
@@ -267,11 +267,7 @@ rf_RemoveFromActiveReconTable(RF_Raid_t 
 RF_ReconParityStripeStatus_t *
 rf_AllocPSStatus(RF_Raid_t *raidPtr)
 {
-	RF_ReconParityStripeStatus_t *p;
-
-	p = pool_get(&rf_pools.pss, PR_WAITOK);
-	memset(p, 0, sizeof(*p));
-	return (p);
+	return pool_get(&rf_pools.pss, PR_WAITOK | PR_ZERO);
 }
 
 void
Index: kern/kern_time.c
===================================================================
RCS file: /cvsroot/src/sys/kern/kern_time.c,v
retrieving revision 1.194
diff -u -p -u -r1.194 kern_time.c
--- kern/kern_time.c	31 Jan 2019 20:09:05 -0000	1.194
+++ kern/kern_time.c	10 Feb 2019 17:04:47 -0000
@@ -603,8 +603,7 @@ timer_create1(timer_t *tid, clockid_t id
 	if ((pts = p->p_timers) == NULL)
 		pts = timers_alloc(p);
 
-	pt = pool_get(&ptimer_pool, PR_WAITOK);
-	memset(pt, 0, sizeof(*pt));
+	pt = pool_get(&ptimer_pool, PR_WAITOK | PR_ZERO);
 	if (evp != NULL) {
 		if (((error =
 		    (*fetch_event)(evp, &pt->pt_ev, sizeof(pt->pt_ev))) != 0) ||
@@ -1166,8 +1165,7 @@ dosetitimer(struct proc *p, int which, s
 	if (pt == NULL) {
 		if (spare == NULL) {
 			mutex_spin_exit(&timer_lock);
-			spare = pool_get(&ptimer_pool, PR_WAITOK);
-			memset(spare, 0, sizeof(*spare));
+			spare = pool_get(&ptimer_pool, PR_WAITOK | PR_ZERO);
 			goto retry;
 		}
 		pt = spare;
Index: kern/subr_pool.c
===================================================================
RCS file: /cvsroot/src/sys/kern/subr_pool.c,v
retrieving revision 1.231
diff -u -p -u -r1.231 subr_pool.c
--- kern/subr_pool.c	23 Dec 2018 12:15:01 -0000	1.231
+++ kern/subr_pool.c	10 Feb 2019 17:04:47 -0000
@@ -959,8 +959,11 @@ pool_get(struct pool *pp, int flags)
 	KASSERT((((vaddr_t)v + pp->pr_itemoffset) & (pp->pr_align - 1)) == 0);
 	FREECHECK_OUT(&pp->pr_freecheck, v);
 	pool_redzone_fill(pp, v);
-	pool_kleak_fill(pp, v);
-	return (v);
+	if (flags & PR_ZERO)
+		memset(v, 0, pp->pr_size);
+	else
+		pool_kleak_fill(pp, v);
+	return v;
 }
 
 /*
Index: kern/sys_aio.c
===================================================================
RCS file: /cvsroot/src/sys/kern/sys_aio.c,v
retrieving revision 1.43
diff -u -p -u -r1.43 sys_aio.c
--- kern/sys_aio.c	1 Jun 2017 02:45:13 -0000	1.43
+++ kern/sys_aio.c	10 Feb 2019 17:04:47 -0000
@@ -564,8 +564,7 @@ aio_enqueue_job(int op, void *aiocb_uptr
 		return error;
 
 	/* Allocate and initialize a new AIO job */
-	a_job = pool_get(&aio_job_pool, PR_WAITOK);
-	memset(a_job, 0, sizeof(struct aio_job));
+	a_job = pool_get(&aio_job_pool, PR_WAITOK | PR_ZERO);
 
 	/*
 	 * Set the data.
Index: kern/vfs_dirhash.c
===================================================================
RCS file: /cvsroot/src/sys/kern/vfs_dirhash.c,v
retrieving revision 1.12
diff -u -p -u -r1.12 vfs_dirhash.c
--- kern/vfs_dirhash.c	5 Sep 2014 05:57:21 -0000	1.12
+++ kern/vfs_dirhash.c	10 Feb 2019 17:04:48 -0000
@@ -202,8 +202,7 @@ dirhash_get(struct dirhash **dirhp)
 	/* if no dirhash was given, allocate one */
 	dirh = *dirhp;
 	if (dirh == NULL) {
-		dirh = pool_get(&dirhash_pool, PR_WAITOK);
-		memset(dirh, 0, sizeof(struct dirhash));
+		dirh = pool_get(&dirhash_pool, PR_WAITOK | PR_ZERO);
 		for (hashline = 0; hashline < DIRHASH_HASHSIZE; hashline++) {
 			LIST_INIT(&dirh->entries[hashline]);
 		}
@@ -301,8 +300,7 @@ dirhash_enter(struct dirhash *dirh,
 	}
 
 	/* add to the hashline */
-	dirh_e = pool_get(&dirhash_entry_pool, PR_WAITOK);
-	memset(dirh_e, 0, sizeof(struct dirhash_entry));
+	dirh_e = pool_get(&dirhash_entry_pool, PR_WAITOK | PR_ZERO);
 
 	dirh_e->hashvalue = hashvalue;
 	dirh_e->offset    = offset;
@@ -333,8 +331,7 @@ dirhash_enter_freed(struct dirhash *dirh
 
 	DPRINTF(("dirhash enter FREED %"PRIu64", %d\n",
 		offset, entry_size));
-	dirh_e = pool_get(&dirhash_entry_pool, PR_WAITOK);
-	memset(dirh_e, 0, sizeof(struct dirhash_entry));
+	dirh_e = pool_get(&dirhash_entry_pool, PR_WAITOK | PR_ZERO);
 
 	dirh_e->hashvalue = 0;		/* not relevant */
 	dirh_e->offset    = offset;
Index: sys/pool.h
===================================================================
RCS file: /cvsroot/src/sys/sys/pool.h,v
retrieving revision 1.83
diff -u -p -u -r1.83 pool.h
--- sys/pool.h	16 Dec 2018 21:03:35 -0000	1.83
+++ sys/pool.h	10 Feb 2019 17:04:49 -0000
@@ -149,6 +149,7 @@ struct pool {
 #define	PR_LARGECACHE	0x1000	/* use large cache groups */
 #define	PR_GROWING	0x2000	/* pool_grow in progress */
 #define	PR_GROWINGNOWAIT 0x4000	/* pool_grow in progress by PR_NOWAIT alloc */
+#define	PR_ZERO		0x8000	/* zero data before returning */
 
 	/*
 	 * `pr_lock' protects the pool's data structures when removing