From: Andreas Herrmann <aherrmann@suse.de>
To: Christoph Hellwig <hch@lst.de>
Cc: Jens Axboe <axboe@kernel.dk>, Tejun Heo <tj@kernel.org>,
Josef Bacik <josef@toxicpanda.com>,
linux-block@vger.kernel.org, cgroups@vger.kernel.org
Subject: Re: [PATCH 11/15] blk-rq-qos: store a gendisk instead of request_queue in struct rq_qos
Date: Fri, 20 Jan 2023 11:19:40 +0100 [thread overview]
Message-ID: <Y8pqvO7S4qPnYXLL@suselix> (raw)
In-Reply-To: <20230117081257.3089859-12-hch@lst.de>
On Tue, Jan 17, 2023 at 09:12:53AM +0100, Christoph Hellwig wrote:
> This is what about half of the users already want, and it's only going to
> grow more.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> block/blk-iocost.c | 12 ++++++------
> block/blk-iolatency.c | 14 +++++++-------
> block/blk-mq-debugfs.c | 10 ++++------
> block/blk-rq-qos.c | 4 ++--
> block/blk-rq-qos.h | 2 +-
> block/blk-wbt.c | 16 +++++++---------
> 6 files changed, 27 insertions(+), 31 deletions(-)
Looks good to me. Feel free to add
Reviewed-by: Andreas Herrmann <aherrmann@suse.de>
> diff --git a/block/blk-iocost.c b/block/blk-iocost.c
> index 73f09e3556d7e4..54e42b22b3599f 100644
> --- a/block/blk-iocost.c
> +++ b/block/blk-iocost.c
> @@ -667,7 +667,7 @@ static struct ioc *q_to_ioc(struct request_queue *q)
>
> static const char __maybe_unused *ioc_name(struct ioc *ioc)
> {
> - struct gendisk *disk = ioc->rqos.q->disk;
> + struct gendisk *disk = ioc->rqos.disk;
>
> if (!disk)
> return "<unknown>";
> @@ -806,11 +806,11 @@ static int ioc_autop_idx(struct ioc *ioc)
> u64 now_ns;
>
> /* rotational? */
> - if (!blk_queue_nonrot(ioc->rqos.q))
> + if (!blk_queue_nonrot(ioc->rqos.disk->queue))
> return AUTOP_HDD;
>
> /* handle SATA SSDs w/ broken NCQ */
> - if (blk_queue_depth(ioc->rqos.q) == 1)
> + if (blk_queue_depth(ioc->rqos.disk->queue) == 1)
> return AUTOP_SSD_QD1;
>
> /* use one of the normal ssd sets */
> @@ -2642,7 +2642,7 @@ static void ioc_rqos_throttle(struct rq_qos *rqos, struct bio *bio)
> if (use_debt) {
> iocg_incur_debt(iocg, abs_cost, &now);
> if (iocg_kick_delay(iocg, &now))
> - blkcg_schedule_throttle(rqos->q->disk,
> + blkcg_schedule_throttle(rqos->disk,
> (bio->bi_opf & REQ_SWAP) == REQ_SWAP);
> iocg_unlock(iocg, ioc_locked, &flags);
> return;
> @@ -2743,7 +2743,7 @@ static void ioc_rqos_merge(struct rq_qos *rqos, struct request *rq,
> if (likely(!list_empty(&iocg->active_list))) {
> iocg_incur_debt(iocg, abs_cost, &now);
> if (iocg_kick_delay(iocg, &now))
> - blkcg_schedule_throttle(rqos->q->disk,
> + blkcg_schedule_throttle(rqos->disk,
> (bio->bi_opf & REQ_SWAP) == REQ_SWAP);
> } else {
> iocg_commit_bio(iocg, bio, abs_cost, cost);
> @@ -2814,7 +2814,7 @@ static void ioc_rqos_exit(struct rq_qos *rqos)
> {
> struct ioc *ioc = rqos_to_ioc(rqos);
>
> - blkcg_deactivate_policy(rqos->q, &blkcg_policy_iocost);
> + blkcg_deactivate_policy(rqos->disk->queue, &blkcg_policy_iocost);
>
> spin_lock_irq(&ioc->lock);
> ioc->running = IOC_STOP;
> diff --git a/block/blk-iolatency.c b/block/blk-iolatency.c
> index f6aeb3d3fdae59..8e1e43bbde6f0b 100644
> --- a/block/blk-iolatency.c
> +++ b/block/blk-iolatency.c
> @@ -292,7 +292,7 @@ static void __blkcg_iolatency_throttle(struct rq_qos *rqos,
> unsigned use_delay = atomic_read(&lat_to_blkg(iolat)->use_delay);
>
> if (use_delay)
> - blkcg_schedule_throttle(rqos->q->disk, use_memdelay);
> + blkcg_schedule_throttle(rqos->disk, use_memdelay);
>
> /*
> * To avoid priority inversions we want to just take a slot if we are
> @@ -330,7 +330,7 @@ static void scale_cookie_change(struct blk_iolatency *blkiolat,
> struct child_latency_info *lat_info,
> bool up)
> {
> - unsigned long qd = blkiolat->rqos.q->nr_requests;
> + unsigned long qd = blkiolat->rqos.disk->queue->nr_requests;
> unsigned long scale = scale_amount(qd, up);
> unsigned long old = atomic_read(&lat_info->scale_cookie);
> unsigned long max_scale = qd << 1;
> @@ -372,7 +372,7 @@ static void scale_cookie_change(struct blk_iolatency *blkiolat,
> */
> static void scale_change(struct iolatency_grp *iolat, bool up)
> {
> - unsigned long qd = iolat->blkiolat->rqos.q->nr_requests;
> + unsigned long qd = iolat->blkiolat->rqos.disk->queue->nr_requests;
> unsigned long scale = scale_amount(qd, up);
> unsigned long old = iolat->max_depth;
>
> @@ -646,7 +646,7 @@ static void blkcg_iolatency_exit(struct rq_qos *rqos)
>
> timer_shutdown_sync(&blkiolat->timer);
> flush_work(&blkiolat->enable_work);
> - blkcg_deactivate_policy(rqos->q, &blkcg_policy_iolatency);
> + blkcg_deactivate_policy(rqos->disk->queue, &blkcg_policy_iolatency);
> kfree(blkiolat);
> }
>
> @@ -665,7 +665,7 @@ static void blkiolatency_timer_fn(struct timer_list *t)
>
> rcu_read_lock();
> blkg_for_each_descendant_pre(blkg, pos_css,
> - blkiolat->rqos.q->root_blkg) {
> + blkiolat->rqos.disk->queue->root_blkg) {
> struct iolatency_grp *iolat;
> struct child_latency_info *lat_info;
> unsigned long flags;
> @@ -749,9 +749,9 @@ static void blkiolatency_enable_work_fn(struct work_struct *work)
> */
> enabled = atomic_read(&blkiolat->enable_cnt);
> if (enabled != blkiolat->enabled) {
> - blk_mq_freeze_queue(blkiolat->rqos.q);
> + blk_mq_freeze_queue(blkiolat->rqos.disk->queue);
> blkiolat->enabled = enabled;
> - blk_mq_unfreeze_queue(blkiolat->rqos.q);
> + blk_mq_unfreeze_queue(blkiolat->rqos.disk->queue);
> }
> }
>
> diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
> index bd942341b6382f..b01818f8e216e3 100644
> --- a/block/blk-mq-debugfs.c
> +++ b/block/blk-mq-debugfs.c
> @@ -813,9 +813,9 @@ static const char *rq_qos_id_to_name(enum rq_qos_id id)
>
> void blk_mq_debugfs_unregister_rqos(struct rq_qos *rqos)
> {
> - lockdep_assert_held(&rqos->q->debugfs_mutex);
> + lockdep_assert_held(&rqos->disk->queue->debugfs_mutex);
>
> - if (!rqos->q->debugfs_dir)
> + if (!rqos->disk->queue->debugfs_dir)
> return;
> debugfs_remove_recursive(rqos->debugfs_dir);
> rqos->debugfs_dir = NULL;
> @@ -823,7 +823,7 @@ void blk_mq_debugfs_unregister_rqos(struct rq_qos *rqos)
>
> void blk_mq_debugfs_register_rqos(struct rq_qos *rqos)
> {
> - struct request_queue *q = rqos->q;
> + struct request_queue *q = rqos->disk->queue;
> const char *dir_name = rq_qos_id_to_name(rqos->id);
>
> lockdep_assert_held(&q->debugfs_mutex);
> @@ -835,9 +835,7 @@ void blk_mq_debugfs_register_rqos(struct rq_qos *rqos)
> q->rqos_debugfs_dir = debugfs_create_dir("rqos",
> q->debugfs_dir);
>
> - rqos->debugfs_dir = debugfs_create_dir(dir_name,
> - rqos->q->rqos_debugfs_dir);
> -
> + rqos->debugfs_dir = debugfs_create_dir(dir_name, q->rqos_debugfs_dir);
> debugfs_create_files(rqos->debugfs_dir, rqos, rqos->ops->debugfs_attrs);
> }
>
> diff --git a/block/blk-rq-qos.c b/block/blk-rq-qos.c
> index 8e83734cfe8dbc..d8cc820a365e3a 100644
> --- a/block/blk-rq-qos.c
> +++ b/block/blk-rq-qos.c
> @@ -300,7 +300,7 @@ int rq_qos_add(struct rq_qos *rqos, struct gendisk *disk, enum rq_qos_id id,
> {
> struct request_queue *q = disk->queue;
>
> - rqos->q = q;
> + rqos->disk = disk;
> rqos->id = id;
> rqos->ops = ops;
>
> @@ -337,7 +337,7 @@ int rq_qos_add(struct rq_qos *rqos, struct gendisk *disk, enum rq_qos_id id,
>
> void rq_qos_del(struct rq_qos *rqos)
> {
> - struct request_queue *q = rqos->q;
> + struct request_queue *q = rqos->disk->queue;
> struct rq_qos **cur;
>
> /*
> diff --git a/block/blk-rq-qos.h b/block/blk-rq-qos.h
> index 2b7b668479f71a..b02a1a3d33a89e 100644
> --- a/block/blk-rq-qos.h
> +++ b/block/blk-rq-qos.h
> @@ -26,7 +26,7 @@ struct rq_wait {
>
> struct rq_qos {
> const struct rq_qos_ops *ops;
> - struct request_queue *q;
> + struct gendisk *disk;
> enum rq_qos_id id;
> struct rq_qos *next;
> #ifdef CONFIG_BLK_DEBUG_FS
> diff --git a/block/blk-wbt.c b/block/blk-wbt.c
> index 1c4469f9962de8..73822260be537c 100644
> --- a/block/blk-wbt.c
> +++ b/block/blk-wbt.c
> @@ -98,7 +98,7 @@ static void wb_timestamp(struct rq_wb *rwb, unsigned long *var)
> */
> static bool wb_recent_wait(struct rq_wb *rwb)
> {
> - struct bdi_writeback *wb = &rwb->rqos.q->disk->bdi->wb;
> + struct bdi_writeback *wb = &rwb->rqos.disk->bdi->wb;
>
> return time_before(jiffies, wb->dirty_sleep + HZ);
> }
> @@ -235,7 +235,7 @@ enum {
>
> static int latency_exceeded(struct rq_wb *rwb, struct blk_rq_stat *stat)
> {
> - struct backing_dev_info *bdi = rwb->rqos.q->disk->bdi;
> + struct backing_dev_info *bdi = rwb->rqos.disk->bdi;
> struct rq_depth *rqd = &rwb->rq_depth;
> u64 thislat;
>
> @@ -288,7 +288,7 @@ static int latency_exceeded(struct rq_wb *rwb, struct blk_rq_stat *stat)
>
> static void rwb_trace_step(struct rq_wb *rwb, const char *msg)
> {
> - struct backing_dev_info *bdi = rwb->rqos.q->disk->bdi;
> + struct backing_dev_info *bdi = rwb->rqos.disk->bdi;
> struct rq_depth *rqd = &rwb->rq_depth;
>
> trace_wbt_step(bdi, msg, rqd->scale_step, rwb->cur_win_nsec,
> @@ -358,13 +358,12 @@ static void wb_timer_fn(struct blk_stat_callback *cb)
> unsigned int inflight = wbt_inflight(rwb);
> int status;
>
> - if (!rwb->rqos.q->disk)
> + if (!rwb->rqos.disk)
> return;
>
> status = latency_exceeded(rwb, cb->stat);
>
> - trace_wbt_timer(rwb->rqos.q->disk->bdi, status, rqd->scale_step,
> - inflight);
> + trace_wbt_timer(rwb->rqos.disk->bdi, status, rqd->scale_step, inflight);
>
> /*
> * If we exceeded the latency target, step down. If we did not,
> @@ -702,16 +701,15 @@ static int wbt_data_dir(const struct request *rq)
>
> static void wbt_queue_depth_changed(struct rq_qos *rqos)
> {
> - RQWB(rqos)->rq_depth.queue_depth = blk_queue_depth(rqos->q);
> + RQWB(rqos)->rq_depth.queue_depth = blk_queue_depth(rqos->disk->queue);
> wbt_update_limits(RQWB(rqos));
> }
>
> static void wbt_exit(struct rq_qos *rqos)
> {
> struct rq_wb *rwb = RQWB(rqos);
> - struct request_queue *q = rqos->q;
>
> - blk_stat_remove_callback(q, rwb->cb);
> + blk_stat_remove_callback(rqos->disk->queue, rwb->cb);
> blk_stat_free_callback(rwb->cb);
> kfree(rwb);
> }
> --
> 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)
next prev parent reply other threads:[~2023-01-20 10:19 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-17 8:12 switch blk-cgroup to work on gendisk Christoph Hellwig
2023-01-17 8:12 ` [PATCH 03/15] blk-cgroup: delay blk-cgroup initialization until add_disk Christoph Hellwig
[not found] ` <20230117081257.3089859-4-hch-jcswGhMUV9g@public.gmane.org>
2023-01-20 8:56 ` Andreas Herrmann
2023-01-27 7:01 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 05/15] blk-cgroup: store a gendisk to throttle in struct task_struct Christoph Hellwig
2023-01-20 9:00 ` Andreas Herrmann
2023-01-27 7:03 ` Hannes Reinecke
[not found] ` <20230117081257.3089859-1-hch-jcswGhMUV9g@public.gmane.org>
2023-01-17 8:12 ` [PATCH 01/15] blk-cgroup: don't defer blkg_free to a workqueue Christoph Hellwig
2023-01-20 8:54 ` Andreas Herrmann
2023-01-27 6:59 ` Hannes Reinecke
[not found] ` <b4622942-67e7-969b-4439-0aea7c5bd165-l3A5Bk7waGM@public.gmane.org>
2023-01-27 7:07 ` Christoph Hellwig
2023-01-27 7:43 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 02/15] block: don't call blk_throtl_stat_add for non-READ/WRITE commands Christoph Hellwig
[not found] ` <20230117081257.3089859-3-hch-jcswGhMUV9g@public.gmane.org>
2023-01-20 8:55 ` Andreas Herrmann
2023-01-27 7:00 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 04/15] blk-cgroup: pin the gendisk in struct blkcg_gq Christoph Hellwig
[not found] ` <20230117081257.3089859-5-hch-jcswGhMUV9g@public.gmane.org>
2023-01-20 8:57 ` Andreas Herrmann
2023-01-27 7:02 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 06/15] blk-wbt: pass a gendisk to wbt_{enable,disable}_default Christoph Hellwig
2023-01-20 9:10 ` Andreas Herrmann
2023-01-27 7:04 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 07/15] blk-wbt: pass a gendisk to wbt_init Christoph Hellwig
2023-01-20 9:53 ` Andreas Herrmann
[not found] ` <20230117081257.3089859-8-hch-jcswGhMUV9g@public.gmane.org>
2023-01-27 7:05 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 08/15] blk-wbt: open code wbt_queue_depth_changed in wbt_update_limits Christoph Hellwig
2023-01-20 9:21 ` Andreas Herrmann
[not found] ` <20230117081257.3089859-9-hch-jcswGhMUV9g@public.gmane.org>
2023-01-27 7:07 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 11/15] blk-rq-qos: store a gendisk instead of request_queue in struct rq_qos Christoph Hellwig
2023-01-20 10:19 ` Andreas Herrmann [this message]
2023-01-27 7:09 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 09/15] blk-rq-qos: make rq_qos_add and rq_qos_del more useful Christoph Hellwig
[not found] ` <20230117081257.3089859-10-hch-jcswGhMUV9g@public.gmane.org>
2023-01-20 9:57 ` Andreas Herrmann
2023-01-27 7:08 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 10/15] blk-rq-qos: constify rq_qos_ops Christoph Hellwig
2023-01-20 10:01 ` Andreas Herrmann
[not found] ` <20230117081257.3089859-11-hch-jcswGhMUV9g@public.gmane.org>
2023-01-27 7:08 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 12/15] blk-cgroup: pass a gendisk to blkcg_{de,}activate_policy Christoph Hellwig
2023-01-20 10:26 ` Andreas Herrmann
2023-01-27 7:10 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 13/15] blk-cgroup: pass a gendisk to pd_alloc_fn Christoph Hellwig
[not found] ` <20230117081257.3089859-14-hch-jcswGhMUV9g@public.gmane.org>
2023-01-20 10:37 ` Andreas Herrmann
2023-01-27 7:10 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 14/15] blk-cgroup: pass a gendisk to blkg_lookup Christoph Hellwig
[not found] ` <20230117081257.3089859-15-hch-jcswGhMUV9g@public.gmane.org>
2023-01-20 11:07 ` Andreas Herrmann
2023-01-27 7:11 ` Hannes Reinecke
2023-01-17 8:12 ` [PATCH 15/15] blk-cgroup: move the cgroup information to struct gendisk Christoph Hellwig
[not found] ` <20230117081257.3089859-16-hch-jcswGhMUV9g@public.gmane.org>
2023-01-20 11:07 ` Andreas Herrmann
2023-01-27 7:12 ` Hannes Reinecke
2023-01-19 17:03 ` switch blk-cgroup to work on gendisk Tejun Heo
[not found] ` <Y8l34/qeHPLV4rKJ-NiLfg/pYEd1N0TnZuCh8vA@public.gmane.org>
2023-01-19 17:05 ` Christoph Hellwig
[not found] ` <20230119170526.GA5050-jcswGhMUV9g@public.gmane.org>
2023-01-19 17:13 ` Tejun Heo
-- strict thread matches above, loose matches on Subject: below --
2023-01-24 6:57 switch blk-cgroup to work on gendisk v2 Christoph Hellwig
2023-01-24 6:57 ` [PATCH 11/15] blk-rq-qos: store a gendisk instead of request_queue in struct rq_qos Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y8pqvO7S4qPnYXLL@suselix \
--to=aherrmann@suse.de \
--cc=axboe@kernel.dk \
--cc=cgroups@vger.kernel.org \
--cc=hch@lst.de \
--cc=josef@toxicpanda.com \
--cc=linux-block@vger.kernel.org \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox