usr/src/uts/common/fs/zfs/zio.c
changeset 3689 75b45bbf8f18
parent 3668 dc5b9a9208ca
child 3882 f58e2c1a879e
--- a/usr/src/uts/common/fs/zfs/zio.c	Tue Feb 20 17:28:27 2007 -0800
+++ b/usr/src/uts/common/fs/zfs/zio.c	Tue Feb 20 22:55:55 2007 -0800
@@ -1702,7 +1702,18 @@
 	ASSERT(zio->io_stage <= ZIO_STAGE_DONE);
 	ASSERT(zio->io_stalled == 0);
 
-	zio_pipeline[zio->io_stage](zio);
+	/*
+	 * See the comment in zio_next_stage_async() about per-CPU taskqs.
+	 */
+	if (((1U << zio->io_stage) & zio->io_async_stages) &&
+	    (zio->io_stage == ZIO_STAGE_WRITE_COMPRESS) &&
+	    !(zio->io_flags & ZIO_FLAG_METADATA)) {
+		taskq_t *tq = zio->io_spa->spa_zio_issue_taskq[zio->io_type];
+		(void) taskq_dispatch(tq,
+		    (task_func_t *)zio_pipeline[zio->io_stage], zio, TQ_SLEEP);
+	} else {
+		zio_pipeline[zio->io_stage](zio);
+	}
 }
 
 void