On 08/03/2011 03:08 PM, Markus Armbruster wrote:
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()
+ }
+};
+
And again; if we had just one 'flags' value we would have to save
only one variable. And wouldn't need to touch this one for future
states.
#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,
Cheers,
Hannes
--
Dr. Hannes Reinecke zSeries & Storage
h...@suse.de +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)