Re: [RFC V4 4/6] blk-iocost: make iocost pluggable

From: Wang Jianchao
Date: Thu Feb 17 2022 - 22:43:36 EST




On 2022/2/17 4:52 下午, Christoph Hellwig wrote:
> On Thu, Feb 17, 2022 at 11:13:47AM +0800, Wang Jianchao (Kuaishou) wrote:
>> Make blk-iocost pluggable. Then we can close or open it through
>> /sys/block/xxx/queue/qos.
>>
>> Signed-off-by: Wang Jianchao (Kuaishou) <jianchao.wan9@xxxxxxxxx>
>> ---
>> block/blk-iocost.c | 52 ++++++++++++++++++++++++++----------------
>> block/blk-mq-debugfs.c | 2 --
>> block/blk-rq-qos.h | 1 -
>> 3 files changed, 32 insertions(+), 23 deletions(-)
>>
>> diff --git a/block/blk-iocost.c b/block/blk-iocost.c
>> index 769b64394298..5a3a45985b49 100644
>> --- a/block/blk-iocost.c
>> +++ b/block/blk-iocost.c
>> @@ -660,9 +660,10 @@ static struct ioc *rqos_to_ioc(struct rq_qos *rqos)
>> return container_of(rqos, struct ioc, rqos);
>> }
>>
>> +static struct rq_qos_ops ioc_rqos_ops;
>> static struct ioc *q_to_ioc(struct request_queue *q)
>> {
>> - return rqos_to_ioc(rq_qos_id(q, RQ_QOS_COST));
>> + return rqos_to_ioc(rq_qos_by_id(q, ioc_rqos_ops.id));
>> }
>
> This has a single caller, so just open code it.
>
>> +static int blk_iocost_init(struct request_queue *q);
>> +
>> static struct rq_qos_ops ioc_rqos_ops = {
>> + .name = "blk-iocost",
>> + .flags = RQOS_FLAG_CGRP_POL,
>> .throttle = ioc_rqos_throttle,
>> .merge = ioc_rqos_merge,
>> .done_bio = ioc_rqos_done_bio,
>> .done = ioc_rqos_done,
>> .queue_depth_changed = ioc_rqos_queue_depth_changed,
>> .exit = ioc_rqos_exit,
>> + .init = blk_iocost_init,
>> };
>
> Again, move rq_qos_ops below the init function to avoid the forward
> declaration.

Got it

Thanks
Jianchao