[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <OSYP286MB0344F8B1AC5F35BEA990B593BE259@OSYP286MB0344.JPNP286.PROD.OUTLOOK.COM>
Date: Thu, 13 Oct 2022 21:47:33 +0800
From: Jinlong Chen <chenjinlong2016@...look.com>
To: yukuai1@...weicloud.com
Cc: axboe@...nel.dk, chenjinlong2016@...look.com,
linux-block@...r.kernel.org, linux-kernel@...r.kernel.org,
yukuai3@...wei.com
Subject: Re: [PATCH] blk-mq: put the reference of the io scheduler module after switching back
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
Powered by blists - more mailing lists