Commit edb0872f authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

block: move the bdi from the request_queue to the gendisk



The backing device information only makes sense for file system I/O,
and thus belongs into the gendisk and not the lower level request_queue
structure.  Move it there.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Link: https://lore.kernel.org/r/20210809141744.1203023-5-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 1008162b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -5266,7 +5266,7 @@ bfq_set_next_ioprio_data(struct bfq_queue *bfqq, struct bfq_io_cq *bic)
	switch (ioprio_class) {
	default:
		pr_err("bdi %s: bfq: bad prio class %d\n",
				bdi_dev_name(bfqq->bfqd->queue->backing_dev_info),
			bdi_dev_name(queue_to_disk(bfqq->bfqd->queue)->bdi),
			ioprio_class);
		fallthrough;
	case IOPRIO_CLASS_NONE:
+3 −4
Original line number Diff line number Diff line
@@ -489,10 +489,9 @@ static int blkcg_reset_stats(struct cgroup_subsys_state *css,

const char *blkg_dev_name(struct blkcg_gq *blkg)
{
	/* some drivers (floppy) instantiate a queue w/o disk registered */
	if (blkg->q->backing_dev_info->dev)
		return bdi_dev_name(blkg->q->backing_dev_info);
	if (!queue_has_disk(blkg->q) || !queue_to_disk(blkg->q)->bdi->dev)
		return NULL;
	return bdi_dev_name(queue_to_disk(blkg->q)->bdi);
}

/**
+3 −10
Original line number Diff line number Diff line
@@ -14,7 +14,6 @@
 */
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/backing-dev.h>
#include <linux/bio.h>
#include <linux/blkdev.h>
#include <linux/blk-mq.h>
@@ -531,13 +530,9 @@ struct request_queue *blk_alloc_queue(int node_id)
	if (ret)
		goto fail_id;

	q->backing_dev_info = bdi_alloc(node_id);
	if (!q->backing_dev_info)
		goto fail_split;

	q->stats = blk_alloc_queue_stats();
	if (!q->stats)
		goto fail_stats;
		goto fail_split;

	q->node = node_id;

@@ -567,7 +562,7 @@ struct request_queue *blk_alloc_queue(int node_id)
	if (percpu_ref_init(&q->q_usage_counter,
				blk_queue_usage_counter_release,
				PERCPU_REF_INIT_ATOMIC, GFP_KERNEL))
		goto fail_bdi;
		goto fail_stats;

	if (blkcg_init_queue(q))
		goto fail_ref;
@@ -580,10 +575,8 @@ struct request_queue *blk_alloc_queue(int node_id)

fail_ref:
	percpu_ref_exit(&q->q_usage_counter);
fail_bdi:
	blk_free_queue_stats(q->stats);
fail_stats:
	bdi_put(q->backing_dev_info);
	blk_free_queue_stats(q->stats);
fail_split:
	bioset_exit(&q->bio_split);
fail_id:
+1 −1
Original line number Diff line number Diff line
@@ -525,7 +525,7 @@ void blk_mq_free_request(struct request *rq)
		__blk_mq_dec_active_requests(hctx);

	if (unlikely(laptop_mode && !blk_rq_is_passthrough(rq)))
		laptop_io_completion(q->backing_dev_info);
		laptop_io_completion(queue_to_disk(q)->bdi);

	rq_qos_done(q, rq);

+9 −5
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
#include <linux/bio.h>
#include <linux/blkdev.h>
#include <linux/pagemap.h>
#include <linux/backing-dev-defs.h>
#include <linux/gcd.h>
#include <linux/lcm.h>
#include <linux/jiffies.h>
@@ -140,7 +141,9 @@ void blk_queue_max_hw_sectors(struct request_queue *q, unsigned int max_hw_secto
				 limits->logical_block_size >> SECTOR_SHIFT);
	limits->max_sectors = max_sectors;

	q->backing_dev_info->io_pages = max_sectors >> (PAGE_SHIFT - 9);
	if (!queue_has_disk(q))
		return;
	queue_to_disk(q)->bdi->io_pages = max_sectors >> (PAGE_SHIFT - 9);
}
EXPORT_SYMBOL(blk_queue_max_hw_sectors);

@@ -388,10 +391,9 @@ void disk_update_readahead(struct gendisk *disk)
	 * For read-ahead of large files to be effective, we need to read ahead
	 * at least twice the optimal I/O size.
	 */
	q->backing_dev_info->ra_pages =
	disk->bdi->ra_pages =
		max(queue_io_opt(q) * 2 / PAGE_SIZE, VM_READAHEAD_PAGES);
	q->backing_dev_info->io_pages =
		queue_max_sectors(q) >> (PAGE_SHIFT - 9);
	disk->bdi->io_pages = queue_max_sectors(q) >> (PAGE_SHIFT - 9);
}
EXPORT_SYMBOL_GPL(disk_update_readahead);

@@ -473,7 +475,9 @@ EXPORT_SYMBOL(blk_limits_io_opt);
void blk_queue_io_opt(struct request_queue *q, unsigned int opt)
{
	blk_limits_io_opt(&q->limits, opt);
	q->backing_dev_info->ra_pages =
	if (!queue_has_disk(q))
		return;
	queue_to_disk(q)->bdi->ra_pages =
		max(queue_io_opt(q) * 2 / PAGE_SIZE, VM_READAHEAD_PAGES);
}
EXPORT_SYMBOL(blk_queue_io_opt);
Loading