From 5fa07a0daef892b34feac77ef7b791c868a0cbe2 Mon Sep 17 00:00:00 2001
From: Markus Armbruster <armbru@redhat.com>
Date: Tue, 29 Mar 2011 09:50:57 -0300
Subject: [RHEL6 qemu-kvm PATCH 2/4] Don't allow multiwrites against a block device without underlying medium

RH-Author: Markus Armbruster <armbru@redhat.com>
Message-id: <1301392258-4532-2-git-send-email-armbru@redhat.com>
Patchwork-id: 20728
O-Subject: [PATCH RHEL6.1 qemu-kvm 1/2] Don't allow multiwrites against a block
	device without underlying medium
Bugzilla:
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
RH-Acked-by: Alex Williamson <alex.williamson@redhat.com>
RH-Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Bugzilla-related: 654682

From: Ryan Harper <ryanh@us.ibm.com>

If the block device has been closed, we no longer have a medium to submit
IO against, check for this before submitting io.  This prevents a segfault
further in the code where we dereference elements of the block driver.

Signed-off-by: Ryan Harper <ryanh@us.ibm.com>
Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit 301db7c2dd769d48e97c9a766520f8affff76cd7)
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 block.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 block.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/block.c b/block.c
index 17a7457..ccd925f 100644
--- a/block.c
+++ b/block.c
@@ -2154,6 +2154,14 @@ int bdrv_aio_multiwrite(BlockDriverState *bs, BlockRequest *reqs, int num_reqs)
     MultiwriteCB *mcb;
     int i;
 
+    /* don't submit writes if we don't have a medium */
+    if (bs->drv == NULL) {
+        for (i = 0; i < num_reqs; i++) {
+            reqs[i].error = -ENOMEDIUM;
+        }
+        return -1;
+    }
+
     if (num_reqs == 0) {
         return 0;
     }
-- 
1.7.3.2

