qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 27/45] scsi-disk: Preserve tray state on migr


From: Hannes Reinecke
Subject: Re: [Qemu-devel] [PATCH v2 27/45] scsi-disk: Preserve tray state on migration
Date: Thu, 04 Aug 2011 08:23:09 +0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.14) Gecko/20110221 SUSE/3.1.8 Thunderbird/3.1.8

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<address@hidden>
---
  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
address@hidden                        +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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]