Commit a3d96ed2 authored by Damien Le Moal's avatar Damien Le Moal Committed by Martin K. Petersen
Browse files

scsi: block: virtio_blk: Set zone limits before revalidating zones



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: default avatarDamien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20230703024812.76778-5-dlemoal@kernel.org


Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Reviewed-by: default avatarDmitry Fomichev <dmitry.fomichev@wdc.com>
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent a442b899
Loading
Loading
Loading
Loading
+15 −19
Original line number Diff line number Diff line
@@ -781,7 +781,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);
@@ -836,6 +835,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)) {
@@ -844,8 +844,6 @@ 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) {
@@ -858,12 +856,10 @@ static int virtblk_probe_zoned_device(struct virtio_device *vdev,
			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