Hi Jens, I believe this patchset may have fallen through the cracks. I've just rebased it on top of the block-6.17 branch at commit 5421681bc3ef ("blk-ioc: don't hold queue_lock for ioc_lookup_icq()") and sent out v8. Could you please consider pulling it for Linux 6.17? Thanks! --Nilay On 7/30/25 1:16 PM, Nilay Shroff wrote: > Hi, > > There have been a few reports[1] indicating potential lockdep warnings due > to a lock dependency from the percpu allocator to the elevator lock. This > patch series aims to eliminate that dependency. > > The series consists of three patches: > The first patch is preparatory patch and just move elevator queue > allocation logic from ->init_sched into blk_mq_init_sched. > > The second patch in the series restructures sched_tags allocation and > deallocation during elevator update/switch operations to ensure these > actions are performed entirely outside the ->freeze_lock and ->elevator_ > lock. This eliminates the percpu allocator’s lock dependency on the > elevator and freeze lock during scheduler transitions. > > The third patch introduces batch allocation and deallocation helpers for > sched_tags. These helpers are used during __blk_mq_update_nr_hw_queues() > to decouple sched_tags memory management from both the elevator and freeze > locks, addressing the lockdep concerns in the nr_hw_queues update path. > > [1] https://lore.kernel.org/all/0659ea8d-a463-47c8-9180-43c719e106eb@xxxxxxxxxxxxx/ > > Changes since v7: > - Rebased code on top of block-6.17, commit 5421681bc3ef ("blk-ioc: don't > hold queue_lock for ioc_lookup_icq()") > Link to v7: https://lore.kernel.org/all/20250701081954.57381-1-nilay@xxxxxxxxxxxxx/ > > Changes since v6: > - Add warning when loading elevator tags from an xarray yields nothing > (Hannes Reinecke) > - Use elevator tags instead of xarray table as a function argument to > elv_update_nr_hw_queues (Ming Lei) > Link to v6: https://lore.kernel.org/all/20250630054756.54532-1-nilay@xxxxxxxxxxxxx/ > > Changes since v5: > - Fixed smatch warning reported by kernel test robot here: > https://lore.kernel.org/all/202506300509.2S1tygch-lkp@xxxxxxxxx/ > Link to v5: https://lore.kernel.org/all/20250627175544.1063910-1-nilay@xxxxxxxxxxxxx/ > > Changes since v4: > - Define a local Xarray variable in __blk_mq_update_nr_hw_queues to store > sched_tags, instead of storing it in an Xarray defined in 'struct elevator_tags' > (Ming Lei) > Link to v4: https://lore.kernel.org/all/20250624131716.630465-1-nilay@xxxxxxxxxxxxx/ > > Changes since v3: > - Further split the patchset into three patch series so that we can > have a separate patch for sched_tags batch allocation/deallocation > (Ming Lei) > - Use Xarray to store and load the sched_tags (Ming Lei) > - Unexport elevator_alloc() as we no longer need to use it outside > of block layer core (hch) > - unwind the sched_tags allocation and free tags when we it fails in > the middle of allocation (hch) > - Move struct elevator_queue header from commin header to elevator.c > as there's no user of it outside elevator.c (Ming Lei, hch) > Link to v3: https://lore.kernel.org/all/20250616173233.3803824-1-nilay@xxxxxxxxxxxxx/ > > Change since v2: > - Split the patch into a two patch series. The first patch updates > ->init_sched elevator API change and second patch handles the sched > tags allocation/de-allocation logic (Ming Lei) > - Address sched tags allocation/deallocation logic while running in the > context of nr_hw_queue update so that we can handle all possible > scenarios in a single patchest (Ming Lei) > Link to v2: https://lore.kernel.org/all/20250528123638.1029700-1-nilay@xxxxxxxxxxxxx/ > > Changes since v1: > - As the lifetime of elevator queue and sched tags are same, allocate > and move sched tags under struct elevator_queue (Ming Lei) > Link to v1: https://lore.kernel.org/all/20250520103425.1259712-1-nilay@xxxxxxxxxxxxx/ > > Nilay Shroff (3): > block: move elevator queue allocation logic into blk_mq_init_sched > block: fix lockdep warning caused by lock dependency in > elv_iosched_store > block: fix potential deadlock while running nr_hw_queue update > > block/bfq-iosched.c | 13 +-- > block/blk-mq-sched.c | 223 ++++++++++++++++++++++++++++-------------- > block/blk-mq-sched.h | 12 ++- > block/blk-mq.c | 16 ++- > block/blk.h | 4 +- > block/elevator.c | 38 +++++-- > block/elevator.h | 16 ++- > block/kyber-iosched.c | 11 +-- > block/mq-deadline.c | 14 +-- > 9 files changed, 228 insertions(+), 119 deletions(-) >