Add assert under lock to detect cases of dispach of a preallocated

taskq work item to more than one queue concurrently. Also, please
see discussion in zfsonlinux/zfs#3840.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Boris Protopopov <boris.protopopov@actifio.com>
Closes #609
This commit is contained in:
Boris Protopopov 2017-08-08 11:31:52 -04:00 committed by Brian Behlendorf
parent cce83ba0ec
commit 9243b0fb47

View File

@ -683,6 +683,12 @@ taskq_dispatch_ent(taskq_t *tq, task_func_t func, void *arg, uint_t flags,
spin_lock(&t->tqent_lock); spin_lock(&t->tqent_lock);
/*
* Make sure the entry is not on some other taskq; it is important to
* ASSERT() under lock
*/
ASSERT(taskq_empty_ent(t));
/* /*
* Mark it as a prealloc'd task. This is important * Mark it as a prealloc'd task. This is important
* to ensure that we don't free it later. * to ensure that we don't free it later.