From: Chunwei Chen Date: Mon, 23 May 2016 21:12:22 +0000 (-0700) Subject: Fix taskq_wait_outstanding re-evaluate tq_next_id X-Git-Tag: zfs-0.8.0-rc1~152^2~95 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b3a22a0a005eef22d696cc77baa26ef80d1bdc0c;p=zfs Fix taskq_wait_outstanding re-evaluate tq_next_id wait_event is a macro, so the current implementation will cause re- evaluation of tq_next_id every time it wakes up. This would cause taskq_wait_outstanding(tq, 0) to be equivalent to taskq_wait(tq) Signed-off-by: Chunwei Chen Signed-off-by: Brian Behlendorf Signed-off-by: Tim Chase Issue #553 --- diff --git a/module/spl/spl-taskq.c b/module/spl/spl-taskq.c index 9784473bd..320ad3914 100644 --- a/module/spl/spl-taskq.c +++ b/module/spl/spl-taskq.c @@ -447,8 +447,8 @@ taskq_wait_outstanding_check(taskq_t *tq, taskqid_t id) void taskq_wait_outstanding(taskq_t *tq, taskqid_t id) { - wait_event(tq->tq_wait_waitq, - taskq_wait_outstanding_check(tq, id ? id : tq->tq_next_id - 1)); + id = id ? id : tq->tq_next_id - 1; + wait_event(tq->tq_wait_waitq, taskq_wait_outstanding_check(tq, id)); } EXPORT_SYMBOL(taskq_wait_outstanding);