Fix stack dsl_dataset_destroy()
[zfs.git] / module / zfs / zio.c
index 0bf0f6e..e434cf0 100644 (file)
@@ -1049,7 +1049,7 @@ zio_taskq_dispatch(zio_t *zio, enum zio_taskq_type q, boolean_t cutinline)
 {
        spa_t *spa = zio->io_spa;
        zio_type_t t = zio->io_type;
-       int flags = TQ_SLEEP | (cutinline ? TQ_FRONT : 0);
+       int flags = TQ_NOSLEEP | (cutinline ? TQ_FRONT : 0);
 
        /*
         * If we're a config writer or a probe, the normal issue and
@@ -1073,8 +1073,9 @@ zio_taskq_dispatch(zio_t *zio, enum zio_taskq_type q, boolean_t cutinline)
                q++;
 
        ASSERT3U(q, <, ZIO_TASKQ_TYPES);
-       (void) taskq_dispatch(spa->spa_zio_taskq[t][q],
-           (task_func_t *)zio_execute, zio, flags);
+
+       while (taskq_dispatch(spa->spa_zio_taskq[t][q],
+           (task_func_t *)zio_execute, zio, flags) == 0); /* do nothing */
 }
 
 static boolean_t
@@ -1634,7 +1635,7 @@ static void
 zio_write_gang_member_ready(zio_t *zio)
 {
        zio_t *pio = zio_unique_parent(zio);
-       zio_t *gio = zio->io_gang_leader;
+       ASSERTV(zio_t *gio = zio->io_gang_leader;)
        dva_t *cdva = zio->io_bp->blk_dva;
        dva_t *pdva = pio->io_bp->blk_dva;
        uint64_t asize;
@@ -1949,12 +1950,12 @@ static void
 zio_ddt_ditto_write_done(zio_t *zio)
 {
        int p = DDT_PHYS_DITTO;
-       zio_prop_t *zp = &zio->io_prop;
        blkptr_t *bp = zio->io_bp;
        ddt_t *ddt = ddt_select(zio->io_spa, bp);
        ddt_entry_t *dde = zio->io_private;
        ddt_phys_t *ddp = &dde->dde_phys[p];
        ddt_key_t *ddk = &dde->dde_key;
+       ASSERTV(zio_prop_t *zp = &zio->io_prop);
 
        ddt_enter(ddt);