summary refs log tree commit diff stats
path: root/hw/scsi/virtio-scsi-dataplane.c
diff options
context:
space:
mode:
authorFam Zheng <famz@redhat.com>2014-10-19 12:47:42 +0800
committerPaolo Bonzini <pbonzini@redhat.com>2014-10-23 16:41:22 +0200
commit3e2b2a9c49f44926b995495be5e94e61e4f29f5e (patch)
tree0e637dd056123a66c2c8eaed854e97c8cd894808 /hw/scsi/virtio-scsi-dataplane.c
parente40830afa1cff3ffdc37bdfdd40d80860074636c (diff)
downloadfocaccia-qemu-3e2b2a9c49f44926b995495be5e94e61e4f29f5e.tar.gz
focaccia-qemu-3e2b2a9c49f44926b995495be5e94e61e4f29f5e.zip
virtio-scsi-dataplane: Add op blocker
We need this to protect dataplane thread from race conditions with block
jobs until the latter is made dataplane-safe.

Signed-off-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'hw/scsi/virtio-scsi-dataplane.c')
-rw-r--r--hw/scsi/virtio-scsi-dataplane.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/hw/scsi/virtio-scsi-dataplane.c b/hw/scsi/virtio-scsi-dataplane.c
index 48dcfd2852..1f77635774 100644
--- a/hw/scsi/virtio-scsi-dataplane.c
+++ b/hw/scsi/virtio-scsi-dataplane.c
@@ -155,6 +155,8 @@ void virtio_scsi_dataplane_start(VirtIOSCSI *s)
 
     s->dataplane_starting = true;
 
+    assert(!s->blocker);
+    error_setg(&s->blocker, "block device is in use by data plane");
     /* Set up guest notifier (irq) */
     rc = k->set_guest_notifiers(qbus->parent, vs->conf.num_queues + 2, true);
     if (rc != 0) {
@@ -195,6 +197,8 @@ void virtio_scsi_dataplane_stop(VirtIOSCSI *s)
     if (!s->dataplane_started || s->dataplane_stopping) {
         return;
     }
+    error_free(s->blocker);
+    s->blocker = NULL;
     s->dataplane_stopping = true;
     assert(s->ctx == iothread_get_aio_context(vs->conf.iothread));