workqueue: dump workqueue state on sanity check failures in destroy_workqueue()
authorTejun Heo <tj@kernel.org>
Mon, 5 Sep 2016 12:54:06 +0000 (08:54 -0400)
committerTejun Heo <tj@kernel.org>
Mon, 5 Sep 2016 12:54:06 +0000 (08:54 -0400)
destroy_workqueue() performs a number of sanity checks to ensure that
the workqueue is empty before proceeding with destruction.  However,
it's not always easy to tell what's going on just from the warning
message.  Let's dump workqueue state after sanity check failures to
help debugging.

Signed-off-by: Tejun Heo <tj@kernel.org>
Link: http://lkml.kernel.org/r/CACT4Y+Zs6vkjHo9qHb4TrEiz3S4+quvvVQ9VWvj2Mx6pETGb9Q@mail.gmail.com
Cc: Dmitry Vyukov <dvyukov@google.com>
kernel/workqueue.c

index ef071ca73fc325e69adb599e7637358c49cd215b..4eaec8b86d6560250fd2923fc8114905aef1c761 100644 (file)
@@ -4021,6 +4021,7 @@ void destroy_workqueue(struct workqueue_struct *wq)
                for (i = 0; i < WORK_NR_COLORS; i++) {
                        if (WARN_ON(pwq->nr_in_flight[i])) {
                                mutex_unlock(&wq->mutex);
+                               show_workqueue_state();
                                return;
                        }
                }
@@ -4029,6 +4030,7 @@ void destroy_workqueue(struct workqueue_struct *wq)
                    WARN_ON(pwq->nr_active) ||
                    WARN_ON(!list_empty(&pwq->delayed_works))) {
                        mutex_unlock(&wq->mutex);
+                       show_workqueue_state();
                        return;
                }
        }
This page took 0.031974 seconds and 5 git commands to generate.