Messages in this thread | | | From | Jinlong Chen <> | Subject | Re: [PATCH] blk-mq: put the reference of the io scheduler module after switching back | Date | Thu, 13 Oct 2022 21:47:33 +0800 |
| |
Hi, Yu Kuai!
> > I'm confused here, cause I do think this patch make sense. > > blk_mq_update_nr_hw_queues > // for each queue using the tagset > blk_mq_freeze_queue > // if current elevator is not none, swith to none > blk_mq_elv_switch_none > // elevator need to be switched back, got a reference to > // prevent module to be removed. > __module_get > elevator_switch(q, NULL); > > // switch back from none elevator > blk_mq_elv_switch_back > -> should release the module reference here > blk_mq_unfreeze_queue >
We need to release the reference only if blk_mq_elv_switch_back got its own reference. However, blk_mq_elv_switch_back (precisely elevator_switch_mq) does not increase the reference of the module it is switching to. Hence, the reference got in blk_mq_elv_switch_none does not need to be released, or we'll have to re-increase the reference count manually.
> > By the way, I do not test yet, but I think problem can be reporduced: > > > 1. modprobe bfq > 2. switch elevator to bfq > 3. trigger blk_mq_update_nr_hw_queues > 4. switch elevator to none > 5. rmmod bfq will fail >
I tried to reproduce the problem but failed, so I found my mistake.
Sincerely, Jinlong Chen
| |