aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2016-09-05 08:54:06 -0400
committerTejun Heo <tj@kernel.org>2016-09-16 11:08:39 -0400
commitfa07fb6a4ecad41d373eaf1574b9d54b4f0c1e75 (patch)
tree6443de8db4ce01d1cb351b59559190a72985abd5
parent77e5bdf9f7b2d20939c8d807f3e68778d6e1557a (diff)
workqueue: dump workqueue state on sanity check failures in destroy_workqueue()
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>
-rw-r--r--kernel/workqueue.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/workqueue.c b/kernel/workqueue.c
index ef071ca73fc3..4eaec8b86d65 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -4021,6 +4021,7 @@ void destroy_workqueue(struct workqueue_struct *wq)
4021 for (i = 0; i < WORK_NR_COLORS; i++) { 4021 for (i = 0; i < WORK_NR_COLORS; i++) {
4022 if (WARN_ON(pwq->nr_in_flight[i])) { 4022 if (WARN_ON(pwq->nr_in_flight[i])) {
4023 mutex_unlock(&wq->mutex); 4023 mutex_unlock(&wq->mutex);
4024 show_workqueue_state();
4024 return; 4025 return;
4025 } 4026 }
4026 } 4027 }
@@ -4029,6 +4030,7 @@ void destroy_workqueue(struct workqueue_struct *wq)
4029 WARN_ON(pwq->nr_active) || 4030 WARN_ON(pwq->nr_active) ||
4030 WARN_ON(!list_empty(&pwq->delayed_works))) { 4031 WARN_ON(!list_empty(&pwq->delayed_works))) {
4031 mutex_unlock(&wq->mutex); 4032 mutex_unlock(&wq->mutex);
4033 show_workqueue_state();
4032 return; 4034 return;
4033 } 4035 }
4034 } 4036 }