Re: [PATCH] blk-mq: put the reference of the io scheduler module after switching back

From: Yu Kuai
Date: Thu Oct 13 2022 - 09:23:02 EST


Hi,

在 2022/10/13 21:03, Jinlong Chen 写道:
Sorry for the disturbance.

This patch is just wrong. elevator_switch_mq does not increase the reference
count of the io scheduler module to which we are switching. Hence, we do not
need to put the reference back manually.

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

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

Thanks,
Kuai

Sincerely
Jinlong Chen
.