On Mon, Sep 07, 2026 at 01:07:39PM +0200, Niklas Cassel wrote:
> @@ -1274,7 +1274,8 @@ static void virtio_blk_update_config(VirtIODevice 
> *vdev, uint8_t *config)
>                       bs->bl.max_active_zones);
>          virtio_stl_p(vdev, &blkcfg.zoned.max_open_zones,
>                       bs->bl.max_open_zones);
> -        virtio_stl_p(vdev, &blkcfg.zoned.write_granularity, blk_size);
> +        virtio_stl_p(vdev, &blkcfg.zoned.write_granularity,
> +                     blkconf_zone_write_granularity(conf));
>          virtio_stl_p(vdev, &blkcfg.zoned.max_append_sectors,
>                       bs->bl.max_append_sectors);
>      } else {

The device emulation code cannot expose the limit value from the host
device because that would break live migration: a guest device must
remain unchanged across migration and the VIRTIO Configuration Space
cannot change field values if the source and destination hosts have
different disks. The guest driver does not expect these values to
change once the device has been probed.

For example, it would be possible to migrate from a host with a write
granularity of 64 KB to a host with a write granularity of 4 KB. The
guest must still see a 64 KB write granularity the entire time (even
after migration).

For this reason, limits on guest devices must be configured explicitly
rather than automatically populated from the host device limits.

Could you implement an error when the guest limit has not been
configured appropriately for the given BlockBackend instead?

Stefan

Attachment: signature.asc
Description: PGP signature

Reply via email to