blk-cgroup: check for pd_(alloc|free)_fn in blkcg_activate_policy()
Currently all policies implement pd_(alloc|free)_fn, however, this is not necessary for ioprio that only works for blkcg, not blkg. There are no functional changes, prepare to cleanup activating ioprio policy. Signed-off-by: Yu Kuai <yukuai3@huawei.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Acked-by: Tejun Heo <tj@kernel.org> Link: https://lore.kernel.org/r/20240719071506.158075-2-yukuai1@huaweicloud.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
8400291e28
commit
ae8650b45d
@ -1554,6 +1554,14 @@ int blkcg_activate_policy(struct gendisk *disk, const struct blkcg_policy *pol)
|
|||||||
if (blkcg_policy_enabled(q, pol))
|
if (blkcg_policy_enabled(q, pol))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Policy is allowed to be registered without pd_alloc_fn/pd_free_fn,
|
||||||
|
* for example, ioprio. Such policy will work on blkcg level, not disk
|
||||||
|
* level, and don't need to be activated.
|
||||||
|
*/
|
||||||
|
if (WARN_ON_ONCE(!pol->pd_alloc_fn || !pol->pd_free_fn))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
if (queue_is_mq(q))
|
if (queue_is_mq(q))
|
||||||
blk_mq_freeze_queue(q);
|
blk_mq_freeze_queue(q);
|
||||||
retry:
|
retry:
|
||||||
@ -1733,9 +1741,12 @@ int blkcg_policy_register(struct blkcg_policy *pol)
|
|||||||
goto err_unlock;
|
goto err_unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure cpd/pd_alloc_fn and cpd/pd_free_fn in pairs */
|
/*
|
||||||
|
* Make sure cpd/pd_alloc_fn and cpd/pd_free_fn in pairs, and policy
|
||||||
|
* without pd_alloc_fn/pd_free_fn can't be activated.
|
||||||
|
*/
|
||||||
if ((!pol->cpd_alloc_fn ^ !pol->cpd_free_fn) ||
|
if ((!pol->cpd_alloc_fn ^ !pol->cpd_free_fn) ||
|
||||||
(!pol->pd_alloc_fn ^ !pol->pd_free_fn))
|
(!pol->pd_alloc_fn ^ !pol->pd_free_fn))
|
||||||
goto err_unlock;
|
goto err_unlock;
|
||||||
|
|
||||||
/* register @pol */
|
/* register @pol */
|
||||||
|
Loading…
Reference in New Issue
Block a user