Bug #943
closedzio_interrupt ends up calling taskq_dispatch with TQ_SLEEP
100%
Description
While digging through bug reports and such looking for hints toward an end-user deadlock, I happened upon a report suggesting that ZFS was calling taskq_dispatch with TQ_SLEEP while in interrupt context. Code inspection appears to bear this out.
The call chain ends up being: sdintr --> ... --> biodone --> vdev_disk_io_intr --> zio_interrupt --> zio_taskq_dispatch --> taskq_dispatch, where zio_taskq_dispatch explicitly ors TQ_SLEEP into any flags argument:
source:usr/src/uts/common/fs/zfs/zio.c#L1056
Related issues
Updated by Garrett D'Amore almost 12 years ago
- Assignee set to Garrett D'Amore
- Priority changed from Normal to High
- Difficulty set to Medium
- Tags set to needs-triage
I'll probably fix this as part of my changes for "prealloc'd" taskqs. This subsystem should never have to go to kmem.
Updated by Garrett D'Amore over 11 years ago
- Status changed from New to Resolved
- % Done changed from 0 to 100
Resolved in:
changeset: 13414:b42c1f0432b6
tag: tip
user: Garrett D'Amore <garrett@nexenta.com>
date: Wed Jul 27 07:13:44 2011 -0700
description:
734 taskq_dispatch_prealloc() desired
943 zio_interrupt ends up calling taskq_dispatch with TQ_SLEEP
Reviewed by: Albert Lee <trisk@nexenta.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Reviewed by: Alexey Zaytsev <alexey.zaytsev@nexenta.com>
Reviewed by: Jason Brian King <jason.brian.king@gmail.com>
Reviewed by: George Wilson <gwilson@zfsmail.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Approved by: Gordon Ross <gwr@nexenta.com>