On Tue, Jan 17, 2023 at 09:12:56AM +0100, Christoph Hellwig wrote: > Pass a gendisk to blkg_lookup and use that to find the match as part > of phasing out usage of the request_queue in the blk-cgroup code. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > block/blk-cgroup.c | 16 ++++++++-------- > block/blk-cgroup.h | 20 ++++++++++---------- > 2 files changed, 18 insertions(+), 18 deletions(-) Looks good to me. Feel free to add Reviewed-by: Andreas Herrmann <aherrmann@xxxxxxx> > diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c > index 601b156897dea4..a041b3ddab6e33 100644 > --- a/block/blk-cgroup.c > +++ b/block/blk-cgroup.c > @@ -320,7 +320,7 @@ static struct blkcg_gq *blkg_create(struct blkcg *blkcg, struct gendisk *disk, > > /* link parent */ > if (blkcg_parent(blkcg)) { > - blkg->parent = blkg_lookup(blkcg_parent(blkcg), disk->queue); > + blkg->parent = blkg_lookup(blkcg_parent(blkcg), disk); > if (WARN_ON_ONCE(!blkg->parent)) { > ret = -ENODEV; > goto err_put_css; > @@ -389,12 +389,12 @@ static struct blkcg_gq *blkg_lookup_create(struct blkcg *blkcg, > > WARN_ON_ONCE(!rcu_read_lock_held()); > > - blkg = blkg_lookup(blkcg, q); > + blkg = blkg_lookup(blkcg, disk); > if (blkg) > return blkg; > > spin_lock_irqsave(&q->queue_lock, flags); > - blkg = blkg_lookup(blkcg, q); > + blkg = blkg_lookup(blkcg, disk); > if (blkg) { > if (blkcg != &blkcg_root && > blkg != rcu_dereference(blkcg->blkg_hint)) > @@ -413,7 +413,7 @@ static struct blkcg_gq *blkg_lookup_create(struct blkcg *blkcg, > struct blkcg_gq *ret_blkg = q->root_blkg; > > while (parent) { > - blkg = blkg_lookup(parent, q); > + blkg = blkg_lookup(parent, disk); > if (blkg) { > /* remember closest blkg */ > ret_blkg = blkg; > @@ -692,7 +692,7 @@ int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol, > goto fail_unlock; > } > > - blkg = blkg_lookup(blkcg, q); > + blkg = blkg_lookup(blkcg, disk); > if (blkg) > goto success; > > @@ -706,7 +706,7 @@ int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol, > struct blkcg_gq *new_blkg; > > parent = blkcg_parent(blkcg); > - while (parent && !blkg_lookup(parent, q)) { > + while (parent && !blkg_lookup(parent, disk)) { > pos = parent; > parent = blkcg_parent(parent); > } > @@ -736,7 +736,7 @@ int blkg_conf_prep(struct blkcg *blkcg, const struct blkcg_policy *pol, > goto fail_preloaded; > } > > - blkg = blkg_lookup(pos, q); > + blkg = blkg_lookup(pos, disk); > if (blkg) { > blkg_free(new_blkg); > } else { > @@ -1804,7 +1804,7 @@ void blkcg_maybe_throttle_current(void) > blkcg = css_to_blkcg(blkcg_css()); > if (!blkcg) > goto out; > - blkg = blkg_lookup(blkcg, disk->queue); > + blkg = blkg_lookup(blkcg, disk); > if (!blkg) > goto out; > if (!blkg_tryget(blkg)) > diff --git a/block/blk-cgroup.h b/block/blk-cgroup.h > index 9a2cd3c71a94a2..3e7508907f33d8 100644 > --- a/block/blk-cgroup.h > +++ b/block/blk-cgroup.h > @@ -230,30 +230,30 @@ static inline bool bio_issue_as_root_blkg(struct bio *bio) > } > > /** > - * blkg_lookup - lookup blkg for the specified blkcg - q pair > + * blkg_lookup - lookup blkg for the specified blkcg - disk pair > * @blkcg: blkcg of interest > - * @q: request_queue of interest > + * @disk: gendisk of interest > * > - * Lookup blkg for the @blkcg - @q pair. > + * Lookup blkg for the @blkcg - @disk pair. > > * Must be called in a RCU critical section. > */ > static inline struct blkcg_gq *blkg_lookup(struct blkcg *blkcg, > - struct request_queue *q) > + struct gendisk *disk) > { > struct blkcg_gq *blkg; > > WARN_ON_ONCE(!rcu_read_lock_held()); > > if (blkcg == &blkcg_root) > - return q->root_blkg; > + return disk->queue->root_blkg; > > blkg = rcu_dereference(blkcg->blkg_hint); > - if (blkg && blkg->disk->queue == q) > + if (blkg && blkg->disk == disk) > return blkg; > > - blkg = radix_tree_lookup(&blkcg->blkg_tree, q->id); > - if (blkg && blkg->disk->queue != q) > + blkg = radix_tree_lookup(&blkcg->blkg_tree, disk->queue->id); > + if (blkg && blkg->disk != disk) > blkg = NULL; > return blkg; > } > @@ -353,7 +353,7 @@ static inline void blkg_put(struct blkcg_gq *blkg) > #define blkg_for_each_descendant_pre(d_blkg, pos_css, p_blkg) \ > css_for_each_descendant_pre((pos_css), &(p_blkg)->blkcg->css) \ > if (((d_blkg) = blkg_lookup(css_to_blkcg(pos_css), \ > - (p_blkg)->disk->queue))) > + (p_blkg)->disk))) > > /** > * blkg_for_each_descendant_post - post-order walk of a blkg's descendants > @@ -368,7 +368,7 @@ static inline void blkg_put(struct blkcg_gq *blkg) > #define blkg_for_each_descendant_post(d_blkg, pos_css, p_blkg) \ > css_for_each_descendant_post((pos_css), &(p_blkg)->blkcg->css) \ > if (((d_blkg) = blkg_lookup(css_to_blkcg(pos_css), \ > - (p_blkg)->disk->queue))) > + (p_blkg)->disk))) > > bool __blkcg_punt_bio_submit(struct bio *bio); > > -- > 2.39.0 > -- Regards, Andreas SUSE Software Solutions Germany GmbH Frankenstrasse 146, 90461 Nürnberg, Germany GF: Ivo Totev, Andrew Myers, Andrew McDonald, Martje Boudien Moerman (HRB 36809, AG Nürnberg)