Breaks migration of qdevs "scsi-cd" and legacy "scsi-disk" to older versions. We normally use subsections to avoid that. Not possible here, because we don't have a section to begin with. Too bad.
Signed-off-by: Markus Armbruster <arm...@redhat.com> --- hw/scsi-disk.c | 35 +++++++++++++++++++++++++++++++++++ 1 files changed, 35 insertions(+), 0 deletions(-) diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index f223de6..04e0a77 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -1301,6 +1301,39 @@ static int scsi_disk_initfn(SCSIDevice *dev) return scsi_initfn(dev, scsi_type); } +static int scsi_cd_post_load(void *opaque, int version_id) +{ + SCSIDiskState *s = opaque; + + bdrv_eject(s->bs, s->tray_open); + bdrv_lock_medium(s->bs, s->tray_locked); + return 0; +} + +static const VMStateDescription vmstate_scsi_cd = { + .name = "scsi-cd", + .version_id = 0, + .minimum_version_id = 0, + .post_load = scsi_cd_post_load, + .fields = (VMStateField[]) { + VMSTATE_BOOL(tray_open, SCSIDiskState), + VMSTATE_BOOL(tray_locked, SCSIDiskState), + VMSTATE_END_OF_LIST() + } +}; + +static const VMStateDescription vmstate_scsi_disk = { + .name = "scsi-disk", + .version_id = 0, + .minimum_version_id = 0, + .post_load = scsi_cd_post_load, + .fields = (VMStateField[]) { + VMSTATE_BOOL(tray_open, SCSIDiskState), + VMSTATE_BOOL(tray_locked, SCSIDiskState), + VMSTATE_END_OF_LIST() + } +}; + #define DEFINE_SCSI_DISK_PROPERTIES() \ DEFINE_BLOCK_PROPERTIES(SCSIDiskState, qdev.conf), \ DEFINE_PROP_STRING("ver", SCSIDiskState, version), \ @@ -1333,6 +1366,7 @@ static SCSIDeviceInfo scsi_disk_info[] = { .qdev.fw_name = "disk", .qdev.desc = "virtual SCSI CD-ROM", .qdev.size = sizeof(SCSIDiskState), + .qdev.vmsd = &vmstate_scsi_cd, .qdev.reset = scsi_disk_reset, .init = scsi_cd_initfn, .destroy = scsi_destroy, @@ -1353,6 +1387,7 @@ static SCSIDeviceInfo scsi_disk_info[] = { .qdev.fw_name = "disk", .qdev.desc = "virtual SCSI disk or CD-ROM (legacy)", .qdev.size = sizeof(SCSIDiskState), + .qdev.vmsd = &vmstate_scsi_disk, .qdev.reset = scsi_disk_reset, .init = scsi_disk_initfn, .destroy = scsi_destroy, -- 1.7.6