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@xxxxxxxxxx> Looks good. Reviewed-by: Dmitry Fomichev <dmitry.fomichev@xxxxxxx> > --- > 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