mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-04-06 17:49:11 +03:00
Fix zio_taskq_dispatch to use TQ_NOSLEEP
The zio_taskq_dispatch() function may be called at interrupt time and it is critical that we never sleep. Additionally, wrap taskq_dispatch() in a while loop because it may fail. This is non optimal but is OK for now. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
parent
2a442d1629
commit
5cc556b447
@ -1049,7 +1049,7 @@ zio_taskq_dispatch(zio_t *zio, enum zio_taskq_type q, boolean_t cutinline)
|
|||||||
{
|
{
|
||||||
spa_t *spa = zio->io_spa;
|
spa_t *spa = zio->io_spa;
|
||||||
zio_type_t t = zio->io_type;
|
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
|
* 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++;
|
q++;
|
||||||
|
|
||||||
ASSERT3U(q, <, ZIO_TASKQ_TYPES);
|
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
|
static boolean_t
|
||||||
|
Loading…
Reference in New Issue
Block a user