]> www.infradead.org Git - users/hch/block.git/commitdiff
blk-cgroup: check for pd_(alloc|free)_fn in blkcg_activate_policy()
authorYu Kuai <yukuai3@huawei.com>
Fri, 19 Jul 2024 07:15:04 +0000 (15:15 +0800)
committerJens Axboe <axboe@kernel.dk>
Sun, 28 Jul 2024 22:47:51 +0000 (16:47 -0600)
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>
block/blk-cgroup.c

index 69e70964398c653704ec863af946b0e1b0eef926..fa6ec02ab3cfc3b0d955164697956e4fdabcb811 100644 (file)
@@ -1554,6 +1554,14 @@ int blkcg_activate_policy(struct gendisk *disk, const struct blkcg_policy *pol)
        if (blkcg_policy_enabled(q, pol))
                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))
                blk_mq_freeze_queue(q);
 retry:
@@ -1733,9 +1741,12 @@ int blkcg_policy_register(struct blkcg_policy *pol)
                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) ||
-               (!pol->pd_alloc_fn ^ !pol->pd_free_fn))
+           (!pol->pd_alloc_fn ^ !pol->pd_free_fn))
                goto err_unlock;
 
        /* register @pol */