On 8/14/25 9:05 AM, Yu Kuai wrote: > From: Yu Kuai <yukuai3@xxxxxxxxxx> > > 1) queue_requests_store() is the only caller of > blk_mq_update_nr_requests(), where queue is already freezed, no need to > check mq_freeze_depth; > 2) q->tag_set must be set for request_based device, and queue_is_mq() is > already checked in blk_mq_queue_attr_visible(), no need to check > q->tag_set. > 3) During initialization, hctx->tags in initialized before queue > kobject, and during del_gendisk, queue kobject is deleted before > exiting hctx, hence checking hctx->tags is useless. > > Signed-off-by: Yu Kuai <yukuai3@xxxxxxxxxx> > --- > block/blk-mq.c | 11 +---------- > 1 file changed, 1 insertion(+), 10 deletions(-) > > diff --git a/block/blk-mq.c b/block/blk-mq.c > index b67d6c02eceb..3a219b7b3688 100644 > --- a/block/blk-mq.c > +++ b/block/blk-mq.c > @@ -4921,24 +4921,15 @@ int blk_mq_update_nr_requests(struct request_queue *q, unsigned int nr) > { > struct blk_mq_tag_set *set = q->tag_set; > struct blk_mq_hw_ctx *hctx; > - int ret; > + int ret = 0; > unsigned long i; > > - if (WARN_ON_ONCE(!q->mq_freeze_depth)) > - return -EINVAL; > - > - if (!set) > - return -EINVAL; > - > if (q->nr_requests == nr) > return 0; > > blk_mq_quiesce_queue(q); > > - ret = 0; > queue_for_each_hw_ctx(q, hctx, i) { > - if (!hctx->tags) > - continue; It's possible that hctx->tags is set to NULL in case no software queues are mapped to the hardware queue. So it seems that this check is valid. Please see blk_mq_map_swqueue(). Thanks, --Nilay