workqueue: avoid false negative in assert_manager_or_pool_lock()
authorLai Jiangshan <laijs@cn.fujitsu.com>
Tue, 19 Mar 2013 19:28:21 +0000 (03:28 +0800)
committerTejun Heo <tj@kernel.org>
Wed, 20 Mar 2013 18:21:34 +0000 (11:21 -0700)
If lockdep complains something for other subsystem, lockdep_is_held()
can be false negative, so we need to also test debug_locks before
triggering WARN.

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/workqueue.c

index b6c5a52..47f2587 100644 (file)
@@ -305,7 +305,8 @@ static void copy_workqueue_attrs(struct workqueue_attrs *to,
 
 #ifdef CONFIG_LOCKDEP
 #define assert_manager_or_pool_lock(pool)                              \
-       WARN_ONCE(!lockdep_is_held(&(pool)->manager_mutex) &&           \
+       WARN_ONCE(debug_locks &&                                        \
+                 !lockdep_is_held(&(pool)->manager_mutex) &&           \
                  !lockdep_is_held(&(pool)->lock),                      \
                  "pool->manager_mutex or ->lock should be held")
 #else