Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > media > main-src > by-pkgid > aadbe78a25743146bb784eee19f007c5 > files > 282

kvm-83-164.el5_5.9.src.rpm

From ea918b11970fea767085ce6e13cf0fcdc43b8c71 Mon Sep 17 00:00:00 2001
From: Juan Quintela <quintela@redhat.com>
Date: Thu, 31 Dec 2009 03:02:42 -0200
Subject: [PATCH 1/4] fix barriers support during migration

RH-Author: Juan Quintela <quintela@redhat.com>
Message-id: <1262228562-446-1-git-send-email-quintela@redhat.com>
Patchwork-id: 6029
O-Subject: [PATCH] fix barriers support during migration
Bugzilla: 549938
RH-Acked-by: Marcelo Tosatti <mtosatti@redhat.com>
RH-Acked-by: Glauber Costa <glommer@redhat.com>
RH-Acked-by: Markus Armbruster <armbru@redhat.com>

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 qemu/hw/ide.c        |   21 ++++++++++++++-------
 qemu/hw/virtio-blk.c |   16 +++++++++++-----
 2 files changed, 25 insertions(+), 12 deletions(-)

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 qemu/hw/ide.c        |   21 ++++++++++++++-------
 qemu/hw/virtio-blk.c |   16 +++++++++++-----
 2 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/qemu/hw/ide.c b/qemu/hw/ide.c
index 5c7cfca..44f3526 100644
--- a/qemu/hw/ide.c
+++ b/qemu/hw/ide.c
@@ -2869,14 +2869,21 @@ static void ide_save(QEMUFile* f, IDEState *s, int version_id)
     qemu_put_8s(f, &s->sense_key);
     qemu_put_8s(f, &s->asc);
     /* XXX: if a transfer is pending, we do not save it yet */
-    if (version_id > 4) {
-        qemu_get_8s(f, &s->bs->enable_write_cache);
+    if (version_id > 3) {
+	uint8_t write_cache = 0;
+	if (s->bs) {
+            write_cache = s->bs->enable_write_cache;
+        }
+        /* should we advertise barriers? */
+	qemu_put_8s(f, &write_cache);
     }
 }
 
 /* load per IDE drive data */
 static void ide_load(QEMUFile* f, IDEState *s, int version_id)
 {
+    uint8_t write_cache = 0;
+
     s->mult_sectors=qemu_get_be32(f);
     s->identify_set=qemu_get_be32(f);
     if (s->identify_set) {
@@ -2900,11 +2907,11 @@ static void ide_load(QEMUFile* f, IDEState *s, int version_id)
     qemu_get_8s(f, &s->sense_key);
     qemu_get_8s(f, &s->asc);
     /* XXX: if a transfer is pending, we do not save it yet */
-    if (version_id > 4) {
-        /* should we advertise barriers? */
-        qemu_put_8s(f, &s->bs->enable_write_cache);
-    } else {
-        s->bs->enable_write_cache = 0;
+    if (version_id > 3) {
+        qemu_get_8s(f, &write_cache);
+    }
+    if (s->bs) {
+        s->bs->enable_write_cache = write_cache;
     }
 }
 
diff --git a/qemu/hw/virtio-blk.c b/qemu/hw/virtio-blk.c
index 720243d..1737585 100644
--- a/qemu/hw/virtio-blk.c
+++ b/qemu/hw/virtio-blk.c
@@ -328,14 +328,19 @@ static void virtio_blk_save(QEMUFile *f, void *opaque, int version_id)
     }
     qemu_put_sbyte(f, 0);
     if (version_id > 2) {
+	uint8_t write_cache = 0;
+	if (s->bs) {
+            write_cache = s->bs->enable_write_cache;
+        }
         /* should we advertise barriers? */
-        qemu_put_8s(f, &s->bs->enable_write_cache);
+	qemu_put_8s(f, &write_cache);
     }
 }
 
 static int virtio_blk_load(QEMUFile *f, void *opaque, int version_id)
 {
     VirtIOBlock *s = opaque;
+    uint8_t write_cache = 0;
 
     if (version_id < 2 || version_id > 3)
         return -EINVAL;
@@ -348,9 +353,10 @@ static int virtio_blk_load(QEMUFile *f, void *opaque, int version_id)
         s->rq = req->next;
     }
     if (version_id > 2) {
-        qemu_get_8s(f, &s->bs->enable_write_cache);
-    } else {
-        s->bs->enable_write_cache = 0;
+        qemu_get_8s(f, &write_cache);
+    }
+    if (s->bs) {
+        s->bs->enable_write_cache = write_cache;
     }
 
     return 0;
@@ -385,7 +391,7 @@ void *virtio_blk_init(PCIBus *bus, BlockDriverState *bs)
     s->vq = virtio_add_queue(&s->vdev, 128, virtio_blk_handle_output);
 
     qemu_add_vm_change_state_handler(virtio_blk_dma_restart_cb, s);
-    if (version_id < 3) {
+    if (version_id < 3 && s->bs) {
         s->bs->enable_write_cache = 0;
     }
     register_savevm("virtio-blk", virtio_blk_id++, version_id,
-- 
1.6.3.rc4.29.g8146