Re: [PATCH 02/15] block: refactor disk_update_readahead

Damien Le Moal
2024-01-23T04:41:16Z

On 1/23/24 02:36, Christoph Hellwig wrote:
> Factor out a blk_apply_bdi_limits limits helper that can be used with
> an explicit queue_limits argument, which will be useful later.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> block/blk-settings.c | 21 ++++++++++++---------
> 1 file changed, 12 insertions(+), 9 deletions(-)
>
> diff --git a/block/blk-settings.c b/block/blk-settings.c
> index 06ea91e51b8b2e..e872b0e168525e 100644
> --- a/block/blk-settings.c
> +++ b/block/blk-settings.c
> @@ -85,6 +85,17 @@ void blk_set_stacking_limits(struct queue_limits *lim)
> }
> EXPORT_SYMBOL(blk_set_stacking_limits);
>
> +static void blk_apply_bdi_limits(struct backing_dev_info *bdi,
> + struct queue_limits *lim)
> +{
> + /*
> + * For read-ahead of large files to be effective, we need to read ahead
> + * at least twice the optimal I/O size.
> + */
> + bdi->ra_pages = max(lim->io_opt * 2 / PAGE_SIZE, VM_READAHEAD_PAGES);

Nit: while at it, you could replace that division by PAGE_SIZE with a right
shift by PAGE_SHIFT.

Other than that, looks good to me.

Reviewed-by: Damien Le Moal <dlemoal@kernel.org>

> + bdi->io_pages = lim->max_sectors >> (PAGE_SHIFT - 9);
> +}
> +
> /**
> * blk_queue_bounce_limit - set bounce buffer limit for queue
> * @q: the request queue for the device
> @@ -393,15 +404,7 @@ EXPORT_SYMBOL(blk_queue_alignment_offset);
>
> void disk_update_readahead(struct gendisk *disk)
> {
> - struct request_queue *q = disk->queue;
> -
> - /*
> - * For read-ahead of large files to be effective, we need to read ahead
> - * at least twice the optimal I/O size.
> - */
> - disk->bdi->ra_pages =
> - max(queue_io_opt(q) * 2 / PAGE_SIZE, VM_READAHEAD_PAGES);
> - disk->bdi->io_pages = queue_max_sectors(q) >> (PAGE_SHIFT - 9);
> + blk_apply_bdi_limits(disk->bdi, &disk->queue->limits);
> }
> EXPORT_SYMBOL_GPL(disk_update_readahead);
>

--
Damien Le Moal
Western Digital Research