|
|
9ae3a8 |
From bcc312ef8d0c8ff3c8743e01bd24fd26c4cc96f6 Mon Sep 17 00:00:00 2001
|
|
|
9ae3a8 |
From: Max Reitz <mreitz@redhat.com>
|
|
|
9ae3a8 |
Date: Sun, 19 Jan 2014 18:07:57 +0100
|
|
|
9ae3a8 |
Subject: [PATCH 23/34] block/drive-mirror: Check for NULL backing_hd
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
RH-Author: Max Reitz <mreitz@redhat.com>
|
|
|
9ae3a8 |
Message-id: <1390154881-17140-4-git-send-email-mreitz@redhat.com>
|
|
|
9ae3a8 |
Patchwork-id: 56816
|
|
|
9ae3a8 |
O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 3/7] block/drive-mirror: Check for NULL backing_hd
|
|
|
9ae3a8 |
Bugzilla: 921890
|
|
|
9ae3a8 |
RH-Acked-by: Fam Zheng <famz@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
BZ: 921890
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
It should be possible to execute the QMP "drive-mirror" command in
|
|
|
9ae3a8 |
"none" sync mode and "absolute-paths" mode even for block devices
|
|
|
9ae3a8 |
lacking a backing file.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
"absolute-paths" does in fact not require a backing file to be present,
|
|
|
9ae3a8 |
as can be seen from the "top" sync mode code path. "top" basically
|
|
|
9ae3a8 |
states that the device should indeed have a backing file - however, the
|
|
|
9ae3a8 |
current code catches the case if it doesn't and then simply treats it as
|
|
|
9ae3a8 |
"full" sync mode, creating a target image without a backing file (in
|
|
|
9ae3a8 |
"absolute-paths" mode). Thus, "absolute-paths" does not imply the target
|
|
|
9ae3a8 |
file must indeed have a backing file.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Therefore, the target file may be left unbacked in case of "none" sync
|
|
|
9ae3a8 |
mode as well, if the specified device is not backed either. Currently,
|
|
|
9ae3a8 |
qemu will crash trying to dereference the backing file pointer since it
|
|
|
9ae3a8 |
assumes that it will always be non-NULL in that case ("none" with
|
|
|
9ae3a8 |
"absolute-paths").
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Signed-off-by: Max Reitz <mreitz@redhat.com>
|
|
|
9ae3a8 |
Reviewed-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
|
|
|
9ae3a8 |
Reviewed-by: Eric Blake <eblake@redhat.com>
|
|
|
9ae3a8 |
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
9ae3a8 |
(cherry picked from commit 1452686495922b81d6cf43edf025c1aef15965c0)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Signed-off-by: Max Reitz <mreitz@redhat.com>
|
|
|
9ae3a8 |
---
|
|
|
9ae3a8 |
blockdev.c | 4 +++-
|
|
|
9ae3a8 |
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9ae3a8 |
---
|
|
|
9ae3a8 |
blockdev.c | 4 +++-
|
|
|
9ae3a8 |
1 files changed, 3 insertions(+), 1 deletions(-)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
diff --git a/blockdev.c b/blockdev.c
|
|
|
9ae3a8 |
index 0ba2504..06bbf30 100644
|
|
|
9ae3a8 |
--- a/blockdev.c
|
|
|
9ae3a8 |
+++ b/blockdev.c
|
|
|
9ae3a8 |
@@ -1611,7 +1611,9 @@ void qmp_drive_mirror(const char *device, const char *target,
|
|
|
9ae3a8 |
return;
|
|
|
9ae3a8 |
}
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
- if (sync == MIRROR_SYNC_MODE_FULL && mode != NEW_IMAGE_MODE_EXISTING) {
|
|
|
9ae3a8 |
+ if ((sync == MIRROR_SYNC_MODE_FULL || !source)
|
|
|
9ae3a8 |
+ && mode != NEW_IMAGE_MODE_EXISTING)
|
|
|
9ae3a8 |
+ {
|
|
|
9ae3a8 |
/* create new image w/o backing file */
|
|
|
9ae3a8 |
assert(format && drv);
|
|
|
9ae3a8 |
bdrv_img_create(target, format,
|
|
|
9ae3a8 |
--
|
|
|
9ae3a8 |
1.7.1
|
|
|
9ae3a8 |
|