1
The following changes since commit df34fe314b5da628bc9a2664fb1b887bc0a6cc6d:
1
The following changes since commit 4907644841e3200aea6475c0f72d3d987e9f3d93:
2
2
3
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20190708' into staging (2019-07-08 14:23:32 +0100)
3
Merge tag 'mem-2023-09-19' of https://github.com/davidhildenbrand/qemu into staging (2023-09-19 13:22:19 -0400)
4
4
5
are available in the Git repository at:
5
are available in the Git repository at:
6
6
7
git://repo.or.cz/qemu/kevin.git tags/for-upstream
7
https://repo.or.cz/qemu/kevin.git tags/for-upstream
8
8
9
for you to fetch changes up to f7077c9860a438087c2d9a8cc27cb8438c98a748:
9
for you to fetch changes up to c428b392590df6364a025d5841e3e8a589ebfd4a:
10
10
11
qcow2: Allow -o compat=v3 during qemu-img amend (2019-07-08 16:00:31 +0200)
11
block: mark aio_poll as non-coroutine (2023-09-20 17:46:16 +0200)
12
12
13
----------------------------------------------------------------
13
----------------------------------------------------------------
14
Block layer patches:
14
Block layer patches
15
15
16
- virtio-scsi: Fix request resubmission after I/O error with iothreads
16
- Graph locking part 4 (node management)
17
- qcow2: Fix missing v2/v3 subformat aliases for amend
17
- qemu-img map: report compressed data blocks
18
- qcow(1): More specific error message for wrong format version
18
- block-backend: process I/O in the current AioContext
19
- MAINTAINERS: update RBD block maintainer
20
19
21
----------------------------------------------------------------
20
----------------------------------------------------------------
22
Eric Blake (1):
21
Andrey Drobyshev via (2):
23
qcow2: Allow -o compat=v3 during qemu-img amend
22
block: add BDRV_BLOCK_COMPRESSED flag for bdrv_block_status()
23
qemu-img: map: report compressed data blocks
24
24
25
Jason Dillaman (1):
25
Kevin Wolf (21):
26
MAINTAINERS: update RBD block maintainer
26
block: Remove unused BlockReopenQueueEntry.perms_checked
27
preallocate: Factor out preallocate_truncate_to_real_size()
28
preallocate: Don't poll during permission updates
29
block: Take AioContext lock for bdrv_append() more consistently
30
block: Introduce bdrv_schedule_unref()
31
block-coroutine-wrapper: Add no_co_wrapper_bdrv_wrlock functions
32
block-coroutine-wrapper: Allow arbitrary parameter names
33
block: Mark bdrv_replace_child_noperm() GRAPH_WRLOCK
34
block: Mark bdrv_replace_child_tran() GRAPH_WRLOCK
35
block: Mark bdrv_attach_child_common() GRAPH_WRLOCK
36
block: Call transaction callbacks with lock held
37
block: Mark bdrv_attach_child() GRAPH_WRLOCK
38
block: Mark bdrv_parent_perms_conflict() and callers GRAPH_RDLOCK
39
block: Mark bdrv_get_cumulative_perm() and callers GRAPH_RDLOCK
40
block: Mark bdrv_child_perm() GRAPH_RDLOCK
41
block: Mark bdrv_parent_cb_change_media() GRAPH_RDLOCK
42
block: Take graph rdlock in bdrv_drop_intermediate()
43
block: Take graph rdlock in bdrv_change_aio_context()
44
block: Mark bdrv_root_unref_child() GRAPH_WRLOCK
45
block: Mark bdrv_unref_child() GRAPH_WRLOCK
46
block: Mark bdrv_add/del_child() and caller GRAPH_WRLOCK
27
47
28
John Snow (1):
48
Paolo Bonzini (1):
29
block/qcow: Improve error when opening qcow2 files as qcow
49
block: mark aio_poll as non-coroutine
30
50
31
Stefan Hajnoczi (3):
51
Stefan Hajnoczi (4):
32
vl: add qemu_add_vm_change_state_handler_prio()
52
block: remove AIOCBInfo->get_aio_context()
33
qdev: add qdev_add_vm_change_state_handler()
53
test-bdrv-drain: avoid race with BH in IOThread drain test
34
virtio-scsi: restart DMA after iothread
54
block-backend: process I/O in the current AioContext
55
block-backend: process zoned requests in the current AioContext
35
56
36
include/hw/qdev-core.h | 5 ++++
57
qapi/block-core.json | 6 +-
37
include/sysemu/sysemu.h | 2 ++
58
include/block/aio.h | 3 +-
38
block/qcow.c | 7 ++++-
59
include/block/block-common.h | 7 +
39
block/qcow2.c | 6 ++--
60
include/block/block-global-state.h | 32 +-
40
hw/core/vm-change-state-handler.c | 61 +++++++++++++++++++++++++++++++++++++++
61
include/block/block-io.h | 1 -
41
hw/scsi/scsi-bus.c | 4 +--
62
include/block/block_int-common.h | 34 +-
42
hw/virtio/virtio.c | 4 +--
63
include/block/block_int-global-state.h | 14 +-
43
vl.c | 59 +++++++++++++++++++++++++++++--------
64
include/sysemu/block-backend-global-state.h | 4 +-
44
MAINTAINERS | 2 +-
65
block.c | 348 +++++++---
45
hw/core/Makefile.objs | 1 +
66
block/blklogwrites.c | 4 +
46
10 files changed, 130 insertions(+), 21 deletions(-)
67
block/blkverify.c | 2 +
47
create mode 100644 hw/core/vm-change-state-handler.c
68
block/block-backend.c | 64 +-
48
69
block/copy-before-write.c | 10 +-
70
block/crypto.c | 6 +-
71
block/graph-lock.c | 26 +-
72
block/io.c | 23 +-
73
block/mirror.c | 8 +
74
block/preallocate.c | 133 ++--
75
block/qcow.c | 5 +-
76
block/qcow2.c | 7 +-
77
block/quorum.c | 23 +-
78
block/replication.c | 9 +
79
block/snapshot.c | 2 +
80
block/stream.c | 20 +-
81
block/vmdk.c | 15 +
82
blockdev.c | 23 +-
83
blockjob.c | 2 +
84
hw/nvme/ctrl.c | 7 -
85
qemu-img.c | 8 +-
86
softmmu/dma-helpers.c | 8 -
87
tests/unit/test-bdrv-drain.c | 31 +-
88
tests/unit/test-bdrv-graph-mod.c | 20 +
89
tests/unit/test-block-iothread.c | 3 +
90
util/thread-pool.c | 8 -
91
scripts/block-coroutine-wrapper.py | 18 +-
92
tests/qemu-iotests/051.pc.out | 6 +-
93
tests/qemu-iotests/122.out | 84 +--
94
tests/qemu-iotests/146.out | 780 +++++++++++------------
95
tests/qemu-iotests/154.out | 194 +++---
96
tests/qemu-iotests/179.out | 178 +++---
97
tests/qemu-iotests/209.out | 4 +-
98
tests/qemu-iotests/221.out | 16 +-
99
tests/qemu-iotests/223.out | 60 +-
100
tests/qemu-iotests/241.out | 10 +-
101
tests/qemu-iotests/244.out | 24 +-
102
tests/qemu-iotests/252.out | 10 +-
103
tests/qemu-iotests/253.out | 20 +-
104
tests/qemu-iotests/274.out | 48 +-
105
tests/qemu-iotests/tests/nbd-qemu-allocation.out | 16 +-
106
tests/qemu-iotests/tests/qemu-img-bitmaps.out | 24 +-
107
50 files changed, 1375 insertions(+), 1033 deletions(-)
diff view generated by jsdifflib
Deleted patch
1
From: Stefan Hajnoczi <stefanha@redhat.com>
2
1
3
Add an API for registering vm change state handlers with a well-defined
4
ordering. This is necessary when handlers depend on each other.
5
6
Small coding style fixes are included to make checkpatch.pl happy.
7
8
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
9
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
10
---
11
include/sysemu/sysemu.h | 2 ++
12
vl.c | 59 ++++++++++++++++++++++++++++++++---------
13
2 files changed, 49 insertions(+), 12 deletions(-)
14
15
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
16
index XXXXXXX..XXXXXXX 100644
17
--- a/include/sysemu/sysemu.h
18
+++ b/include/sysemu/sysemu.h
19
@@ -XXX,XX +XXX,XX @@ typedef void VMChangeStateHandler(void *opaque, int running, RunState state);
20
21
VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
22
void *opaque);
23
+VMChangeStateEntry *qemu_add_vm_change_state_handler_prio(
24
+ VMChangeStateHandler *cb, void *opaque, int priority);
25
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e);
26
void vm_state_notify(int running, RunState state);
27
28
diff --git a/vl.c b/vl.c
29
index XXXXXXX..XXXXXXX 100644
30
--- a/vl.c
31
+++ b/vl.c
32
@@ -XXX,XX +XXX,XX @@ static int machine_help_func(QemuOpts *opts, MachineState *machine)
33
struct vm_change_state_entry {
34
VMChangeStateHandler *cb;
35
void *opaque;
36
- QLIST_ENTRY (vm_change_state_entry) entries;
37
+ QTAILQ_ENTRY(vm_change_state_entry) entries;
38
+ int priority;
39
};
40
41
-static QLIST_HEAD(, vm_change_state_entry) vm_change_state_head;
42
+static QTAILQ_HEAD(, vm_change_state_entry) vm_change_state_head;
43
44
-VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
45
- void *opaque)
46
+/**
47
+ * qemu_add_vm_change_state_handler_prio:
48
+ * @cb: the callback to invoke
49
+ * @opaque: user data passed to the callback
50
+ * @priority: low priorities execute first when the vm runs and the reverse is
51
+ * true when the vm stops
52
+ *
53
+ * Register a callback function that is invoked when the vm starts or stops
54
+ * running.
55
+ *
56
+ * Returns: an entry to be freed using qemu_del_vm_change_state_handler()
57
+ */
58
+VMChangeStateEntry *qemu_add_vm_change_state_handler_prio(
59
+ VMChangeStateHandler *cb, void *opaque, int priority)
60
{
61
VMChangeStateEntry *e;
62
+ VMChangeStateEntry *other;
63
64
- e = g_malloc0(sizeof (*e));
65
-
66
+ e = g_malloc0(sizeof(*e));
67
e->cb = cb;
68
e->opaque = opaque;
69
- QLIST_INSERT_HEAD(&vm_change_state_head, e, entries);
70
+ e->priority = priority;
71
+
72
+ /* Keep list sorted in ascending priority order */
73
+ QTAILQ_FOREACH(other, &vm_change_state_head, entries) {
74
+ if (priority < other->priority) {
75
+ QTAILQ_INSERT_BEFORE(other, e, entries);
76
+ return e;
77
+ }
78
+ }
79
+
80
+ QTAILQ_INSERT_TAIL(&vm_change_state_head, e, entries);
81
return e;
82
}
83
84
+VMChangeStateEntry *qemu_add_vm_change_state_handler(VMChangeStateHandler *cb,
85
+ void *opaque)
86
+{
87
+ return qemu_add_vm_change_state_handler_prio(cb, opaque, 0);
88
+}
89
+
90
void qemu_del_vm_change_state_handler(VMChangeStateEntry *e)
91
{
92
- QLIST_REMOVE (e, entries);
93
- g_free (e);
94
+ QTAILQ_REMOVE(&vm_change_state_head, e, entries);
95
+ g_free(e);
96
}
97
98
void vm_state_notify(int running, RunState state)
99
@@ -XXX,XX +XXX,XX @@ void vm_state_notify(int running, RunState state)
100
101
trace_vm_state_notify(running, state, RunState_str(state));
102
103
- QLIST_FOREACH_SAFE(e, &vm_change_state_head, entries, next) {
104
- e->cb(e->opaque, running, state);
105
+ if (running) {
106
+ QTAILQ_FOREACH_SAFE(e, &vm_change_state_head, entries, next) {
107
+ e->cb(e->opaque, running, state);
108
+ }
109
+ } else {
110
+ QTAILQ_FOREACH_REVERSE_SAFE(e, &vm_change_state_head, entries, next) {
111
+ e->cb(e->opaque, running, state);
112
+ }
113
}
114
}
115
116
@@ -XXX,XX +XXX,XX @@ int main(int argc, char **argv, char **envp)
117
exit(1);
118
}
119
120
- QLIST_INIT (&vm_change_state_head);
121
+ QTAILQ_INIT(&vm_change_state_head);
122
os_setup_early_signal_handling();
123
124
cpu_option = NULL;
125
--
126
2.20.1
127
128
diff view generated by jsdifflib
Deleted patch
1
From: Stefan Hajnoczi <stefanha@redhat.com>
2
1
3
Children sometimes depend on their parent's vm change state handler
4
having completed. Add a vm change state handler API for devices that
5
guarantees tree depth ordering.
6
7
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
8
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
9
---
10
include/hw/qdev-core.h | 5 +++
11
hw/core/vm-change-state-handler.c | 61 +++++++++++++++++++++++++++++++
12
hw/core/Makefile.objs | 1 +
13
3 files changed, 67 insertions(+)
14
create mode 100644 hw/core/vm-change-state-handler.c
15
16
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
17
index XXXXXXX..XXXXXXX 100644
18
--- a/include/hw/qdev-core.h
19
+++ b/include/hw/qdev-core.h
20
@@ -XXX,XX +XXX,XX @@
21
#include "qom/object.h"
22
#include "hw/irq.h"
23
#include "hw/hotplug.h"
24
+#include "sysemu/sysemu.h"
25
26
enum {
27
DEV_NVECTORS_UNSPECIFIED = -1,
28
@@ -XXX,XX +XXX,XX @@ static inline bool qbus_is_hotpluggable(BusState *bus)
29
void device_listener_register(DeviceListener *listener);
30
void device_listener_unregister(DeviceListener *listener);
31
32
+VMChangeStateEntry *qdev_add_vm_change_state_handler(DeviceState *dev,
33
+ VMChangeStateHandler *cb,
34
+ void *opaque);
35
+
36
#endif
37
diff --git a/hw/core/vm-change-state-handler.c b/hw/core/vm-change-state-handler.c
38
new file mode 100644
39
index XXXXXXX..XXXXXXX
40
--- /dev/null
41
+++ b/hw/core/vm-change-state-handler.c
42
@@ -XXX,XX +XXX,XX @@
43
+/*
44
+ * qdev vm change state handlers
45
+ *
46
+ * This program is free software; you can redistribute it and/or modify
47
+ * it under the terms of the GNU General Public License as published by
48
+ * the Free Software Foundation; either version 2 of the License,
49
+ * or (at your option) any later version.
50
+ *
51
+ * This program is distributed in the hope that it will be useful,
52
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
53
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
54
+ * GNU General Public License for more details.
55
+ *
56
+ * You should have received a copy of the GNU General Public License
57
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
58
+ */
59
+
60
+#include "qemu/osdep.h"
61
+#include "hw/qdev.h"
62
+
63
+static int qdev_get_dev_tree_depth(DeviceState *dev)
64
+{
65
+ int depth;
66
+
67
+ for (depth = 0; dev; depth++) {
68
+ BusState *bus = dev->parent_bus;
69
+
70
+ if (!bus) {
71
+ break;
72
+ }
73
+
74
+ dev = bus->parent;
75
+ }
76
+
77
+ return depth;
78
+}
79
+
80
+/**
81
+ * qdev_add_vm_change_state_handler:
82
+ * @dev: the device that owns this handler
83
+ * @cb: the callback function to be invoked
84
+ * @opaque: user data passed to the callback function
85
+ *
86
+ * This function works like qemu_add_vm_change_state_handler() except callbacks
87
+ * are invoked in qdev tree depth order. Ordering is desirable when callbacks
88
+ * of children depend on their parent's callback having completed first.
89
+ *
90
+ * For example, when qdev_add_vm_change_state_handler() is used, a host
91
+ * controller's callback is invoked before the children on its bus when the VM
92
+ * starts running. The order is reversed when the VM stops running.
93
+ *
94
+ * Returns: an entry to be freed with qemu_del_vm_change_state_handler()
95
+ */
96
+VMChangeStateEntry *qdev_add_vm_change_state_handler(DeviceState *dev,
97
+ VMChangeStateHandler *cb,
98
+ void *opaque)
99
+{
100
+ int depth = qdev_get_dev_tree_depth(dev);
101
+
102
+ return qemu_add_vm_change_state_handler_prio(cb, opaque, depth);
103
+}
104
diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs
105
index XXXXXXX..XXXXXXX 100644
106
--- a/hw/core/Makefile.objs
107
+++ b/hw/core/Makefile.objs
108
@@ -XXX,XX +XXX,XX @@ common-obj-$(CONFIG_SOFTMMU) += fw-path-provider.o
109
common-obj-y += irq.o
110
common-obj-y += hotplug.o
111
common-obj-$(CONFIG_SOFTMMU) += nmi.o
112
+common-obj-$(CONFIG_SOFTMMU) += vm-change-state-handler.o
113
114
common-obj-$(CONFIG_EMPTY_SLOT) += empty_slot.o
115
common-obj-$(CONFIG_XILINX_AXI) += stream.o
116
--
117
2.20.1
118
119
diff view generated by jsdifflib
Deleted patch
1
From: Stefan Hajnoczi <stefanha@redhat.com>
2
1
3
When the 'cont' command resumes guest execution the vm change state
4
handlers are invoked. Unfortunately there is no explicit ordering
5
between classic qemu_add_vm_change_state_handler() callbacks. When two
6
layers of code both use vm change state handlers, we don't control which
7
handler runs first.
8
9
virtio-scsi with iothreads hits a deadlock when a failed SCSI command is
10
restarted and completes before the iothread is re-initialized.
11
12
This patch uses the new qdev_add_vm_change_state_handler() API to
13
guarantee that virtio-scsi's virtio change state handler executes before
14
the SCSI bus children. This way DMA is restarted after the iothread has
15
re-initialized.
16
17
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
18
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
19
---
20
hw/scsi/scsi-bus.c | 4 ++--
21
hw/virtio/virtio.c | 4 ++--
22
2 files changed, 4 insertions(+), 4 deletions(-)
23
24
diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
25
index XXXXXXX..XXXXXXX 100644
26
--- a/hw/scsi/scsi-bus.c
27
+++ b/hw/scsi/scsi-bus.c
28
@@ -XXX,XX +XXX,XX @@ static void scsi_qdev_realize(DeviceState *qdev, Error **errp)
29
error_propagate(errp, local_err);
30
return;
31
}
32
- dev->vmsentry = qemu_add_vm_change_state_handler(scsi_dma_restart_cb,
33
- dev);
34
+ dev->vmsentry = qdev_add_vm_change_state_handler(DEVICE(dev),
35
+ scsi_dma_restart_cb, dev);
36
}
37
38
static void scsi_qdev_unrealize(DeviceState *qdev, Error **errp)
39
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
40
index XXXXXXX..XXXXXXX 100644
41
--- a/hw/virtio/virtio.c
42
+++ b/hw/virtio/virtio.c
43
@@ -XXX,XX +XXX,XX @@ void virtio_init(VirtIODevice *vdev, const char *name,
44
} else {
45
vdev->config = NULL;
46
}
47
- vdev->vmstate = qemu_add_vm_change_state_handler(virtio_vmstate_change,
48
- vdev);
49
+ vdev->vmstate = qdev_add_vm_change_state_handler(DEVICE(vdev),
50
+ virtio_vmstate_change, vdev);
51
vdev->device_endian = virtio_default_endian();
52
vdev->use_guest_notifier_mask = true;
53
}
54
--
55
2.20.1
56
57
diff view generated by jsdifflib
Deleted patch
1
From: John Snow <jsnow@redhat.com>
2
1
3
Reported-by: radmehrsaeed7@gmail.com
4
Fixes: https://bugs.launchpad.net/bugs/1832914
5
Signed-off-by: John Snow <jsnow@redhat.com>
6
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
7
Reviewed-by: Eric Blake <eblake@redhat.com>
8
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
9
---
10
block/qcow.c | 7 ++++++-
11
1 file changed, 6 insertions(+), 1 deletion(-)
12
13
diff --git a/block/qcow.c b/block/qcow.c
14
index XXXXXXX..XXXXXXX 100644
15
--- a/block/qcow.c
16
+++ b/block/qcow.c
17
@@ -XXX,XX +XXX,XX @@ static int qcow_open(BlockDriverState *bs, QDict *options, int flags,
18
goto fail;
19
}
20
if (header.version != QCOW_VERSION) {
21
- error_setg(errp, "Unsupported qcow version %" PRIu32, header.version);
22
+ error_setg(errp, "qcow (v%d) does not support qcow version %" PRIu32,
23
+ QCOW_VERSION, header.version);
24
+ if (header.version == 2 || header.version == 3) {
25
+ error_append_hint(errp, "Try the 'qcow2' driver instead.\n");
26
+ }
27
+
28
ret = -ENOTSUP;
29
goto fail;
30
}
31
--
32
2.20.1
33
34
diff view generated by jsdifflib
Deleted patch
1
From: Jason Dillaman <dillaman@redhat.com>
2
1
3
Remove Josh as per his request since he is no longer the upstream RBD
4
tech lead. Add myself as the maintainer since I am the current RBD tech
5
lead.
6
7
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
8
Reviewed-by: Josh Durgin <jdurgin@redhat.com>
9
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
10
---
11
MAINTAINERS | 2 +-
12
1 file changed, 1 insertion(+), 1 deletion(-)
13
14
diff --git a/MAINTAINERS b/MAINTAINERS
15
index XXXXXXX..XXXXXXX 100644
16
--- a/MAINTAINERS
17
+++ b/MAINTAINERS
18
@@ -XXX,XX +XXX,XX @@ S: Supported
19
F: block/vmdk.c
20
21
RBD
22
-M: Josh Durgin <jdurgin@redhat.com>
23
+M: Jason Dillaman <dillaman@redhat.com>
24
L: qemu-block@nongnu.org
25
S: Supported
26
F: block/rbd.c
27
--
28
2.20.1
29
30
diff view generated by jsdifflib
Deleted patch
1
From: Eric Blake <eblake@redhat.com>
2
1
3
Commit b76b4f60 allowed '-o compat=v3' as an alias for the
4
less-appealing '-o compat=1.1' for 'qemu-img create' since we want to
5
use the QMP form as much as possible, but forgot to do likewise for
6
qemu-img amend. Also, it doesn't help that '-o help' doesn't list our
7
new preferred spellings.
8
9
Signed-off-by: Eric Blake <eblake@redhat.com>
10
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
11
---
12
block/qcow2.c | 6 +++---
13
1 file changed, 3 insertions(+), 3 deletions(-)
14
15
diff --git a/block/qcow2.c b/block/qcow2.c
16
index XXXXXXX..XXXXXXX 100644
17
--- a/block/qcow2.c
18
+++ b/block/qcow2.c
19
@@ -XXX,XX +XXX,XX @@ static int qcow2_amend_options(BlockDriverState *bs, QemuOpts *opts,
20
compat = qemu_opt_get(opts, BLOCK_OPT_COMPAT_LEVEL);
21
if (!compat) {
22
/* preserve default */
23
- } else if (!strcmp(compat, "0.10")) {
24
+ } else if (!strcmp(compat, "0.10") || !strcmp(compat, "v2")) {
25
new_version = 2;
26
- } else if (!strcmp(compat, "1.1")) {
27
+ } else if (!strcmp(compat, "1.1") || !strcmp(compat, "v3")) {
28
new_version = 3;
29
} else {
30
error_setg(errp, "Unknown compatibility level %s", compat);
31
@@ -XXX,XX +XXX,XX @@ static QemuOptsList qcow2_create_opts = {
32
{
33
.name = BLOCK_OPT_COMPAT_LEVEL,
34
.type = QEMU_OPT_STRING,
35
- .help = "Compatibility level (0.10 or 1.1)"
36
+ .help = "Compatibility level (v2 [0.10] or v3 [1.1])"
37
},
38
{
39
.name = BLOCK_OPT_BACKING_FILE,
40
--
41
2.20.1
42
43
diff view generated by jsdifflib