On Wed, Feb 05, 2025 at 08:14:47PM +0530, Nilay Shroff wrote: > > static void __blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, > @@ -5006,8 +5008,10 @@ static void __blk_mq_update_nr_hw_queues(struct blk_mq_tag_set *set, > return; > > memflags = memalloc_noio_save(); > - list_for_each_entry(q, &set->tag_list, tag_set_list) > + list_for_each_entry(q, &set->tag_list, tag_set_list) { > + mutex_lock(&q->sysfs_lock); This now means we hold up to number of request queues sysfs_lock at the same time. I doubt lockdep will be happy about this. Did you test this patch with a multi-namespace nvme device or a multi-LU per host SCSI setup? I suspect the answer here is to (ab)use the tag_list_lock for scheduler updates - while the scope is too broad for just changing it on a single queue it is a rate operation and it solves the mess in __blk_mq_update_nr_hw_queues.