On 6/20/25 8:47 PM, Ming Lei wrote: > 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. > Oh I see... yes we need to call kobject_put() here. Will do it in the next series. Thanks, --Nilay