Re: [PATCH v2 03/26] block/cgroup: Split blkg_conf_prep()

Christoph Hellwig
2026-03-26T06:25:52Z

On Wed, Mar 25, 2026 at 02:44:44PM -0700, Bart Van Assche wrote:
> Move the blkg_conf_open_bdev() call out of blkg_conf_prep() to make it
> possible to add lock context annotations to blkg_conf_prep(). Change an
> if-statement in blkg_conf_open_bdev() into a WARN_ON_ONCE() call. Export
> blkg_conf_open_bdev() because it is called by the BFQ I/O scheduler and
> the BFQ I/O scheduler may be built as a kernel module.
>
> Cc: Tejun Heo <tj@kernel.org>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
> block/bfq-cgroup.c | 4 ++++
> block/blk-cgroup.c | 16 ++++++----------
> block/blk-iocost.c | 4 ++++
> 3 files changed, 14 insertions(+), 10 deletions(-)
>
> diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c
> index ac83b0668764..38396df9dce7 100644
> --- a/block/bfq-cgroup.c
> +++ b/block/bfq-cgroup.c
> @@ -1051,6 +1051,10 @@ static ssize_t bfq_io_set_device_weight(struct kernfs_open_file *of,
>
> blkg_conf_init(&ctx, buf);
>
> + ret = blkg_conf_open_bdev(&ctx);
> + if (ret)
> + goto out;
> +
> ret = blkg_conf_prep(blkcg, &blkcg_policy_bfq, &ctx);
> if (ret)
> goto out;
> diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
> index 2d7b18eb7291..8cfdbe9fffdc 100644
> --- a/block/blk-cgroup.c
> +++ b/block/blk-cgroup.c
> @@ -771,10 +771,7 @@ EXPORT_SYMBOL_GPL(blkg_conf_init);
> * @ctx->input and get and store the matching bdev in @ctx->bdev. @ctx->body is
> * set to point past the device node prefix.
> *
> - * This function may be called multiple times on @ctx and the extra calls become
> - * NOOPs. blkg_conf_prep() implicitly calls this function. Use this function
> - * explicitly if bdev access is needed without resolving the blkcg / policy part
> - * of @ctx->input. Returns -errno on error.
> + * Returns: -errno on error.
> */
> int blkg_conf_open_bdev(struct blkg_conf_ctx *ctx)
> {
> @@ -783,8 +780,7 @@ int blkg_conf_open_bdev(struct blkg_conf_ctx *ctx)
> struct block_device *bdev;
> int key_len;
>
> - if (ctx->bdev)
> - return 0;
> + WARN_ON_ONCE(ctx->bdev);

Return on this case?

Otherwise looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>