[PATCH v2 4/5] block: virtio_blk: Set zone limits before revalidating zones
Dmitry Fomichev
Dmitry.Fomichev at wdc.com
Sun Jul 2 15:29:38 PDT 2023
On Fri, 2023-06-30 at 17:39 +0900, Damien Le Moal wrote:
> In virtblk_probe_zoned_device(), execute blk_queue_chunk_sectors() and
> blk_queue_max_zone_append_sectors() to respectively set the zoned device
> zone size and maximum zone append sector limit before executing
> blk_revalidate_disk_zones(). This is to allow the block layer zone
> reavlidation to check these device characteristics prior to checking all
> zones of the device.
>
> Signed-off-by: Damien Le Moal <dlemoal at kernel.org>
Looks good.
Reviewed-by: Dmitry Fomichev <dmitry.fomichev at wdc.com>
> ---
> drivers/block/virtio_blk.c | 34 +++++++++++++++-------------------
> 1 file changed, 15 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
> index b47358da92a2..1fe011676d07 100644
> --- a/drivers/block/virtio_blk.c
> +++ b/drivers/block/virtio_blk.c
> @@ -751,7 +751,6 @@ static int virtblk_probe_zoned_device(struct virtio_device
> *vdev,
> {
> u32 v, wg;
> u8 model;
> - int ret;
>
> virtio_cread(vdev, struct virtio_blk_config,
> zoned.model, &model);
> @@ -806,6 +805,7 @@ static int virtblk_probe_zoned_device(struct virtio_device
> *vdev,
> vblk->zone_sectors);
> return -ENODEV;
> }
> + blk_queue_chunk_sectors(q, vblk->zone_sectors);
> dev_dbg(&vdev->dev, "zone sectors = %u\n", vblk->zone_sectors);
>
> if (virtio_has_feature(vdev, VIRTIO_BLK_F_DISCARD)) {
> @@ -814,26 +814,22 @@ static int virtblk_probe_zoned_device(struct
> virtio_device *vdev,
> blk_queue_max_discard_sectors(q, 0);
> }
>
> - ret = blk_revalidate_disk_zones(vblk->disk, NULL);
> - if (!ret) {
> - virtio_cread(vdev, struct virtio_blk_config,
> - zoned.max_append_sectors, &v);
> - if (!v) {
> - dev_warn(&vdev->dev, "zero max_append_sectors
> reported\n");
> - return -ENODEV;
> - }
> - if ((v << SECTOR_SHIFT) < wg) {
> - dev_err(&vdev->dev,
> - "write granularity %u exceeds
> max_append_sectors %u limit\n",
> - wg, v);
> - return -ENODEV;
> - }
> -
> - blk_queue_max_zone_append_sectors(q, v);
> - dev_dbg(&vdev->dev, "max append sectors = %u\n", v);
> + virtio_cread(vdev, struct virtio_blk_config,
> + zoned.max_append_sectors, &v);
> + if (!v) {
> + dev_warn(&vdev->dev, "zero max_append_sectors reported\n");
> + return -ENODEV;
> + }
> + if ((v << SECTOR_SHIFT) < wg) {
> + dev_err(&vdev->dev,
> + "write granularity %u exceeds max_append_sectors %u
> limit\n",
> + wg, v);
> + return -ENODEV;
> }
> + blk_queue_max_zone_append_sectors(q, v);
> + dev_dbg(&vdev->dev, "max append sectors = %u\n", v);
>
> - return ret;
> + return blk_revalidate_disk_zones(vblk->disk, NULL);
> }
>
> #else
More information about the Linux-nvme
mailing list