diff options
| author | Nilay Shroff <[email protected]> | 2025-07-30 07:46:08 +0000 |
|---|---|---|
| committer | Jens Axboe <[email protected]> | 2025-07-30 12:20:51 +0000 |
| commit | f5a6604f7a4405450e4a1f54e5430f47290c500f (patch) | |
| tree | a5acccbbee197d41202b36a28c60825c615f51a5 /scripts/bpf_doc.py | |
| parent | block: move elevator queue allocation logic into blk_mq_init_sched (diff) | |
| download | kernel-f5a6604f7a4405450e4a1f54e5430f47290c500f.tar.gz kernel-f5a6604f7a4405450e4a1f54e5430f47290c500f.zip | |
block: fix lockdep warning caused by lock dependency in elv_iosched_store
Recent lockdep reports [1] have revealed a potential deadlock caused by a
lock dependency between the percpu allocator lock and the elevator lock.
This issue can be avoided by ensuring that the allocation and release of
scheduler tags (sched_tags) are performed outside the elevator lock.
Furthermore, the queue does not need to be remain frozen during these
operations.
To address this, move all sched_tags allocations and deallocations outside
of both the ->elevator_lock and the ->freeze_lock. Since the lifetime of
the elevator queue and its associated sched_tags is closely tied, the
allocated sched_tags are now stored in the elevator queue structure. Then,
during the actual elevator switch (which runs under ->freeze_lock and
->elevator_lock), the pre-allocated sched_tags are assigned to the
appropriate q->hctx. Once the elevator switch is complete and the locks
are released, the old elevator queue and its associated sched_tags are
freed.
This commit specifically addresses the allocation/deallocation of sched_
tags during elevator switching. Note that sched_tags may also be allocated
in other contexts, such as during nr_hw_queues updates. Supporting that
use case will require batch allocation/deallocation, which will be handled
in a follow-up patch.
This restructuring ensures that sched_tags memory management occurs
entirely outside of the ->elevator_lock and ->freeze_lock context,
eliminating the lock dependency problem seen during scheduler updates.
[1] https://lore.kernel.org/all/[email protected]/
Reported-by: Stefan Haberland <[email protected]>
Closes: https://lore.kernel.org/all/[email protected]/
Reviewed-by: Ming Lei <[email protected]>
Reviewed-by: Christoph Hellwig <[email protected]>
Reviewed-by: Hannes Reinecke <[email protected]>
Signed-off-by: Nilay Shroff <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jens Axboe <[email protected]>
Diffstat (limited to 'scripts/bpf_doc.py')
0 files changed, 0 insertions, 0 deletions
