On Fri, Jun 20, 2025 at 08:09:01PM +0530, Nilay Shroff wrote: > > > On 6/17/25 8:37 PM, Ming Lei wrote: > > On Mon, Jun 16, 2025 at 11:02:25PM +0530, Nilay Shroff wrote: > >> In preparation for allocating sched_tags before freezing the request > >> queue and acquiring ->elevator_lock, move the elevator queue allocation > >> logic from the elevator ops ->init_sched callback into blk_mq_init_sched. > >> > >> This refactoring provides a centralized location for elevator queue > >> initialization, which makes it easier to store pre-allocated sched_tags > >> in the struct elevator_queue during later changes. > >> > >> Signed-off-by: Nilay Shroff <nilay@xxxxxxxxxxxxx> > >> --- > > [...] > > >> diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c > >> index 55a0fd105147..d914eb9d61a6 100644 > >> --- a/block/blk-mq-sched.c > >> +++ b/block/blk-mq-sched.c > >> @@ -475,6 +475,10 @@ int blk_mq_init_sched(struct request_queue *q, struct elevator_type *e) > >> q->nr_requests = 2 * min_t(unsigned int, q->tag_set->queue_depth, > >> BLKDEV_DEFAULT_RQ); > >> > >> + eq = elevator_alloc(q, e); > >> + if (!eq) > >> + return -ENOMEM; > >> + > >> if (blk_mq_is_shared_tags(flags)) { > >> ret = blk_mq_init_sched_shared_tags(q); > >> if (ret) > > > > The above failure needs to be handled by kobject_put(&eq->kobj). > > I think here the elevator_alloc() failure occurs before we initialize > eq->kobj. So we don't need to handle it with kobject_put(&eq->kobj) > and instead simply returning -ENOMEM should be sufficient. Agree? I meant the failure from blk_mq_init_sched_shared_tags(), which has to call kobject_put() for correct cleanup. Thanks, Ming