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 |