diff options
author | Olaf Faaland <[email protected]> | 2015-10-13 16:56:51 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2015-12-11 16:19:56 -0800 |
commit | 326172d8549e0a34a8e4ef4665d8bdfcf7aeda6e (patch) | |
tree | a2f510e287126a137fa81d24c2c4f926a4f28740 /module/Makefile.in | |
parent | 628fc52137fc14377eba46c66b57d8d094e88507 (diff) |
Subclass tq_lock to eliminate a lockdep warning
When taskq_dispatch() calls taskq_thread_spawn() to create a new thread
for a taskq, linux lockdep warns of possible recursive locking. This is
a false positive.
One such call chain is as follows, when a taskq needs more threads:
taskq_dispatch->taskq_thread_spawn->taskq_dispatch
The initial taskq_dispatch() holds tq_lock on the taskq that needed more
worker threads. The later call into taskq_dispatch() takes
dynamic_taskq->tq_lock. Without subclassing, lockdep believes these
could potentially be the same lock and complains. A similar case occurs
when taskq_dispatch() then calls task_alloc().
This patch uses spin_lock_irqsave_nested() when taking tq_lock, with one
of two new lock subclasses:
subclass taskq
TQ_LOCK_DYNAMIC dynamic_taskq
TQ_LOCK_GENERAL any other
Signed-off-by: Olaf Faaland <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Issue #480
Diffstat (limited to 'module/Makefile.in')
0 files changed, 0 insertions, 0 deletions