diff mbox series

[v2,4/5] block: virtio_blk: Set zone limits before revalidating zones

Message ID 20230630083935.433334-5-dlemoal@kernel.org
State Superseded
Headers show
Series Improve checks in blk_revalidate_disk_zones() | expand

Commit Message

Damien Le Moal June 30, 2023, 8:39 a.m. UTC
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@kernel.org>
---
 drivers/block/virtio_blk.c | 34 +++++++++++++++-------------------
 1 file changed, 15 insertions(+), 19 deletions(-)

Comments

Dmitry Fomichev July 2, 2023, 10:29 p.m. UTC | #1
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@kernel.org>

Looks good.
Reviewed-by: Dmitry Fomichev <dmitry.fomichev@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
Christoph Hellwig July 6, 2023, 12:41 p.m. UTC | #2
Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>
diff mbox series

Patch

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