Hi,
I was looking for examples of taskq usage in the kernel code and
see the following code in usr/src/uts/common/fs/zfs/zio.c
...
1744 if ((1U << zio->io_stage) & zio->io_async_stages) {
1745 if (zio->io_stage < ZIO_STAGE_VDEV_IO_DONE)
1746 tq =
zio->io_spa->spa_zio_issue_taskq[zio->io_type];
1747 else
1748 tq =
zio->io_spa->spa_zio_intr_taskq[zio->io_type];
1749 (void) taskq_dispatch(tq,
1750 (task_func_t *)zio_pipeline[zio->io_stage],
zio, TQ_SLEEP);
It seems to me spa_zio_intr_taskq is used when we are in an interrupt
context
(I/O completion interrupt). If so, why is it safe to use TQ_SLEEP here?
I plan to do some thing similar (notify a client of an I/O completion)
in some KCF code
and hence the interest.
Thanks,
-Krishna