1 | The following changes since commit 19b599f7664b2ebfd0f405fb79c14dd241557452: | 1 | The following changes since commit 887cba855bb6ff4775256f7968409281350b568c: |
---|---|---|---|
2 | 2 | ||
3 | Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2018-08-27-v2' into staging (2018-08-27 16:44:20 +0100) | 3 | configure: Fix cross-building for RISCV host (v5) (2023-07-11 17:56:09 +0100) |
4 | 4 | ||
5 | are available in the Git repository at: | 5 | are available in the Git repository at: |
6 | 6 | ||
7 | git://github.com/codyprime/qemu-kvm-jtc.git tags/block-pull-request | 7 | https://gitlab.com/stefanha/qemu.git tags/block-pull-request |
8 | 8 | ||
9 | for you to fetch changes up to 8af2eb7b43a1b694fd6d1d090025027d6b72caac: | 9 | for you to fetch changes up to 75dcb4d790bbe5327169fd72b185960ca58e2fa6: |
10 | 10 | ||
11 | block/rbd: add deprecation documentation for filename keyvalue pairs (2018-09-12 08:51:45 -0400) | 11 | virtio-blk: fix host notifier issues during dataplane start/stop (2023-07-12 15:20:32 -0400) |
12 | 12 | ||
13 | ---------------------------------------------------------------- | 13 | ---------------------------------------------------------------- |
14 | Block patches for RBD | 14 | Pull request |
15 | |||
15 | ---------------------------------------------------------------- | 16 | ---------------------------------------------------------------- |
16 | 17 | ||
17 | Jeff Cody (4): | 18 | Stefan Hajnoczi (1): |
18 | block/rbd: pull out qemu_rbd_convert_options | 19 | virtio-blk: fix host notifier issues during dataplane start/stop |
19 | block/rbd: Attempt to parse legacy filenames | ||
20 | block/rbd: add iotest for rbd legacy keyvalue filename parsing | ||
21 | block/rbd: add deprecation documentation for filename keyvalue pairs | ||
22 | 20 | ||
23 | block/rbd.c | 89 ++++++++++++++++++++++++++++++++------ | 21 | hw/block/dataplane/virtio-blk.c | 67 +++++++++++++++++++-------------- |
24 | qemu-deprecated.texi | 15 +++++++ | 22 | 1 file changed, 38 insertions(+), 29 deletions(-) |
25 | tests/qemu-iotests/231 | 62 ++++++++++++++++++++++++++ | ||
26 | tests/qemu-iotests/231.out | 9 ++++ | ||
27 | tests/qemu-iotests/group | 1 + | ||
28 | 5 files changed, 162 insertions(+), 14 deletions(-) | ||
29 | create mode 100755 tests/qemu-iotests/231 | ||
30 | create mode 100644 tests/qemu-iotests/231.out | ||
31 | 23 | ||
32 | -- | 24 | -- |
33 | 2.17.1 | 25 | 2.40.1 |
34 | |||
35 | diff view generated by jsdifflib |
1 | Code movement to pull the conversion from Qdict to BlockdevOptionsRbd | 1 | The main loop thread can consume 100% CPU when using --device |
---|---|---|---|
2 | into a helper function. | 2 | virtio-blk-pci,iothread=<iothread>. ppoll() constantly returns but |
3 | reading virtqueue host notifiers fails with EAGAIN. The file descriptors | ||
4 | are stale and remain registered with the AioContext because of bugs in | ||
5 | the virtio-blk dataplane start/stop code. | ||
3 | 6 | ||
4 | Reviewed-by: Eric Blake <eblake@redhat.com> | 7 | The problem is that the dataplane start/stop code involves drain |
5 | Reviewed-by: John Snow <jsnow@redhat.com> | 8 | operations, which call virtio_blk_drained_begin() and |
6 | Signed-off-by: Jeff Cody <jcody@redhat.com> | 9 | virtio_blk_drained_end() at points where the host notifier is not |
7 | Message-id: 5b49a980f2cde6610ab1df41bb0277d00b5db893.1536704901.git.jcody@redhat.com | 10 | operational: |
8 | Signed-off-by: Jeff Cody <jcody@redhat.com> | 11 | - In virtio_blk_data_plane_start(), blk_set_aio_context() drains after |
12 | vblk->dataplane_started has been set to true but the host notifier has | ||
13 | not been attached yet. | ||
14 | - In virtio_blk_data_plane_stop(), blk_drain() and blk_set_aio_context() | ||
15 | drain after the host notifier has already been detached but with | ||
16 | vblk->dataplane_started still set to true. | ||
17 | |||
18 | I would like to simplify ->ioeventfd_start/stop() to avoid interactions | ||
19 | with drain entirely, but couldn't find a way to do that. Instead, this | ||
20 | patch accepts the fragile nature of the code and reorders it so that | ||
21 | vblk->dataplane_started is false during drain operations. This way the | ||
22 | virtio_blk_drained_begin() and virtio_blk_drained_end() calls don't | ||
23 | touch the host notifier. The result is that | ||
24 | virtio_blk_data_plane_start() and virtio_blk_data_plane_stop() have | ||
25 | complete control over the host notifier and stale file descriptors are | ||
26 | no longer left in the AioContext. | ||
27 | |||
28 | This patch fixes the 100% CPU consumption in the main loop thread and | ||
29 | correctly moves host notifier processing to the IOThread. | ||
30 | |||
31 | Fixes: 1665d9326fd2 ("virtio-blk: implement BlockDevOps->drained_begin()") | ||
32 | Reported-by: Lukáš Doktor <ldoktor@redhat.com> | ||
33 | Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> | ||
34 | Tested-by: Lukas Doktor <ldoktor@redhat.com> | ||
35 | Message-id: 20230704151527.193586-1-stefanha@redhat.com | ||
36 | Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> | ||
9 | --- | 37 | --- |
10 | block/rbd.c | 36 ++++++++++++++++++++++++------------ | 38 | hw/block/dataplane/virtio-blk.c | 67 +++++++++++++++++++-------------- |
11 | 1 file changed, 24 insertions(+), 12 deletions(-) | 39 | 1 file changed, 38 insertions(+), 29 deletions(-) |
12 | 40 | ||
13 | diff --git a/block/rbd.c b/block/rbd.c | 41 | diff --git a/hw/block/dataplane/virtio-blk.c b/hw/block/dataplane/virtio-blk.c |
14 | index XXXXXXX..XXXXXXX 100644 | 42 | index XXXXXXX..XXXXXXX 100644 |
15 | --- a/block/rbd.c | 43 | --- a/hw/block/dataplane/virtio-blk.c |
16 | +++ b/block/rbd.c | 44 | +++ b/hw/block/dataplane/virtio-blk.c |
17 | @@ -XXX,XX +XXX,XX @@ failed_opts: | 45 | @@ -XXX,XX +XXX,XX @@ int virtio_blk_data_plane_start(VirtIODevice *vdev) |
18 | return r; | 46 | |
47 | memory_region_transaction_commit(); | ||
48 | |||
49 | - /* | ||
50 | - * These fields are visible to the IOThread so we rely on implicit barriers | ||
51 | - * in aio_context_acquire() on the write side and aio_notify_accept() on | ||
52 | - * the read side. | ||
53 | - */ | ||
54 | - s->starting = false; | ||
55 | - vblk->dataplane_started = true; | ||
56 | trace_virtio_blk_data_plane_start(s); | ||
57 | |||
58 | old_context = blk_get_aio_context(s->conf->conf.blk); | ||
59 | @@ -XXX,XX +XXX,XX @@ int virtio_blk_data_plane_start(VirtIODevice *vdev) | ||
60 | event_notifier_set(virtio_queue_get_host_notifier(vq)); | ||
61 | } | ||
62 | |||
63 | + /* | ||
64 | + * These fields must be visible to the IOThread when it processes the | ||
65 | + * virtqueue, otherwise it will think dataplane has not started yet. | ||
66 | + * | ||
67 | + * Make sure ->dataplane_started is false when blk_set_aio_context() is | ||
68 | + * called above so that draining does not cause the host notifier to be | ||
69 | + * detached/attached prematurely. | ||
70 | + */ | ||
71 | + s->starting = false; | ||
72 | + vblk->dataplane_started = true; | ||
73 | + smp_wmb(); /* paired with aio_notify_accept() on the read side */ | ||
74 | + | ||
75 | /* Get this show started by hooking up our callbacks */ | ||
76 | if (!blk_in_drain(s->conf->conf.blk)) { | ||
77 | aio_context_acquire(s->ctx); | ||
78 | @@ -XXX,XX +XXX,XX @@ int virtio_blk_data_plane_start(VirtIODevice *vdev) | ||
79 | fail_guest_notifiers: | ||
80 | vblk->dataplane_disabled = true; | ||
81 | s->starting = false; | ||
82 | - vblk->dataplane_started = true; | ||
83 | return -ENOSYS; | ||
19 | } | 84 | } |
20 | 85 | ||
21 | +static int qemu_rbd_convert_options(QDict *options, BlockdevOptionsRbd **opts, | 86 | @@ -XXX,XX +XXX,XX @@ void virtio_blk_data_plane_stop(VirtIODevice *vdev) |
22 | + Error **errp) | 87 | aio_wait_bh_oneshot(s->ctx, virtio_blk_data_plane_stop_bh, s); |
23 | +{ | 88 | } |
24 | + Visitor *v; | 89 | |
25 | + Error *local_err = NULL; | 90 | + /* |
91 | + * Batch all the host notifiers in a single transaction to avoid | ||
92 | + * quadratic time complexity in address_space_update_ioeventfds(). | ||
93 | + */ | ||
94 | + memory_region_transaction_begin(); | ||
26 | + | 95 | + |
27 | + /* Convert the remaining options into a QAPI object */ | 96 | + for (i = 0; i < nvqs; i++) { |
28 | + v = qobject_input_visitor_new_flat_confused(options, errp); | 97 | + virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); |
29 | + if (!v) { | ||
30 | + return -EINVAL; | ||
31 | + } | 98 | + } |
32 | + | 99 | + |
33 | + visit_type_BlockdevOptionsRbd(v, NULL, opts, &local_err); | 100 | + /* |
34 | + visit_free(v); | 101 | + * The transaction expects the ioeventfds to be open when it |
102 | + * commits. Do it now, before the cleanup loop. | ||
103 | + */ | ||
104 | + memory_region_transaction_commit(); | ||
35 | + | 105 | + |
36 | + if (local_err) { | 106 | + for (i = 0; i < nvqs; i++) { |
37 | + error_propagate(errp, local_err); | 107 | + virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); |
38 | + return -EINVAL; | ||
39 | + } | 108 | + } |
40 | + | 109 | + |
41 | + return 0; | 110 | + /* |
42 | +} | 111 | + * Set ->dataplane_started to false before draining so that host notifiers |
112 | + * are not detached/attached anymore. | ||
113 | + */ | ||
114 | + vblk->dataplane_started = false; | ||
43 | + | 115 | + |
44 | static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags, | 116 | aio_context_acquire(s->ctx); |
45 | Error **errp) | 117 | |
46 | { | 118 | /* Wait for virtio_blk_dma_restart_bh() and in flight I/O to complete */ |
47 | BDRVRBDState *s = bs->opaque; | 119 | @@ -XXX,XX +XXX,XX @@ void virtio_blk_data_plane_stop(VirtIODevice *vdev) |
48 | BlockdevOptionsRbd *opts = NULL; | 120 | |
49 | - Visitor *v; | 121 | aio_context_release(s->ctx); |
50 | const QDictEntry *e; | 122 | |
51 | Error *local_err = NULL; | 123 | - /* |
52 | char *keypairs, *secretid; | 124 | - * Batch all the host notifiers in a single transaction to avoid |
53 | @@ -XXX,XX +XXX,XX @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags, | 125 | - * quadratic time complexity in address_space_update_ioeventfds(). |
54 | qdict_del(options, "password-secret"); | 126 | - */ |
55 | } | 127 | - memory_region_transaction_begin(); |
56 | 128 | - | |
57 | - /* Convert the remaining options into a QAPI object */ | 129 | - for (i = 0; i < nvqs; i++) { |
58 | - v = qobject_input_visitor_new_flat_confused(options, errp); | 130 | - virtio_bus_set_host_notifier(VIRTIO_BUS(qbus), i, false); |
59 | - if (!v) { | ||
60 | - r = -EINVAL; | ||
61 | - goto out; | ||
62 | - } | 131 | - } |
63 | - | 132 | - |
64 | - visit_type_BlockdevOptionsRbd(v, NULL, &opts, &local_err); | 133 | - /* |
65 | - visit_free(v); | 134 | - * The transaction expects the ioeventfds to be open when it |
135 | - * commits. Do it now, before the cleanup loop. | ||
136 | - */ | ||
137 | - memory_region_transaction_commit(); | ||
66 | - | 138 | - |
67 | + r = qemu_rbd_convert_options(options, &opts, &local_err); | 139 | - for (i = 0; i < nvqs; i++) { |
68 | if (local_err) { | 140 | - virtio_bus_cleanup_host_notifier(VIRTIO_BUS(qbus), i); |
69 | error_propagate(errp, local_err); | 141 | - } |
70 | - r = -EINVAL; | 142 | - |
71 | goto out; | 143 | qemu_bh_cancel(s->bh); |
72 | } | 144 | notify_guest_bh(s); /* final chance to notify guest */ |
73 | 145 | ||
146 | /* Clean up guest notifier (irq) */ | ||
147 | k->set_guest_notifiers(qbus->parent, nvqs, false); | ||
148 | |||
149 | - vblk->dataplane_started = false; | ||
150 | s->stopping = false; | ||
151 | } | ||
74 | -- | 152 | -- |
75 | 2.17.1 | 153 | 2.40.1 |
76 | 154 | ||
77 | 155 | diff view generated by jsdifflib |
Deleted patch | |||
---|---|---|---|
1 | When we converted rbd to get rid of the older key/value-centric | ||
2 | encoding format, we broke compatibility with image files with backing | ||
3 | file strings encoded in the old format. | ||
4 | 1 | ||
5 | This leaves a bit of an ugly conundrum, and a hacky solution. | ||
6 | |||
7 | If the initial attempt to parse the "proper" options fails, it assumes | ||
8 | that we may have an older key/value encoded filename. Fall back to | ||
9 | attempting to parse the filename, and extract the required options from | ||
10 | it. If that fails, pass along the original error message. | ||
11 | |||
12 | We do not support mixed modern usage alongside legacy keyvalue pair | ||
13 | usage. | ||
14 | |||
15 | A deprecation warning has been added, although care should be taken | ||
16 | when actually deprecating since the impact is not limited to | ||
17 | commandline or qapi usage, but also opening existing images. | ||
18 | |||
19 | Reviewed-by: Eric Blake <eblake@redhat.com> | ||
20 | Signed-off-by: Jeff Cody <jcody@redhat.com> | ||
21 | Message-id: 15b332e5432ad069441f7275a46080f465d789a0.1536704901.git.jcody@redhat.com | ||
22 | Signed-off-by: Jeff Cody <jcody@redhat.com> | ||
23 | --- | ||
24 | block/rbd.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- | ||
25 | 1 file changed, 51 insertions(+), 2 deletions(-) | ||
26 | |||
27 | diff --git a/block/rbd.c b/block/rbd.c | ||
28 | index XXXXXXX..XXXXXXX 100644 | ||
29 | --- a/block/rbd.c | ||
30 | +++ b/block/rbd.c | ||
31 | @@ -XXX,XX +XXX,XX @@ static int qemu_rbd_convert_options(QDict *options, BlockdevOptionsRbd **opts, | ||
32 | return 0; | ||
33 | } | ||
34 | |||
35 | +static int qemu_rbd_attempt_legacy_options(QDict *options, | ||
36 | + BlockdevOptionsRbd **opts, | ||
37 | + char **keypairs) | ||
38 | +{ | ||
39 | + char *filename; | ||
40 | + int r; | ||
41 | + | ||
42 | + filename = g_strdup(qdict_get_try_str(options, "filename")); | ||
43 | + if (!filename) { | ||
44 | + return -EINVAL; | ||
45 | + } | ||
46 | + qdict_del(options, "filename"); | ||
47 | + | ||
48 | + qemu_rbd_parse_filename(filename, options, NULL); | ||
49 | + | ||
50 | + /* keypairs freed by caller */ | ||
51 | + *keypairs = g_strdup(qdict_get_try_str(options, "=keyvalue-pairs")); | ||
52 | + if (*keypairs) { | ||
53 | + qdict_del(options, "=keyvalue-pairs"); | ||
54 | + } | ||
55 | + | ||
56 | + r = qemu_rbd_convert_options(options, opts, NULL); | ||
57 | + | ||
58 | + g_free(filename); | ||
59 | + return r; | ||
60 | +} | ||
61 | + | ||
62 | static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags, | ||
63 | Error **errp) | ||
64 | { | ||
65 | @@ -XXX,XX +XXX,XX @@ static int qemu_rbd_open(BlockDriverState *bs, QDict *options, int flags, | ||
66 | |||
67 | r = qemu_rbd_convert_options(options, &opts, &local_err); | ||
68 | if (local_err) { | ||
69 | - error_propagate(errp, local_err); | ||
70 | - goto out; | ||
71 | + /* If keypairs are present, that means some options are present in | ||
72 | + * the modern option format. Don't attempt to parse legacy option | ||
73 | + * formats, as we won't support mixed usage. */ | ||
74 | + if (keypairs) { | ||
75 | + error_propagate(errp, local_err); | ||
76 | + goto out; | ||
77 | + } | ||
78 | + | ||
79 | + /* If the initial attempt to convert and process the options failed, | ||
80 | + * we may be attempting to open an image file that has the rbd options | ||
81 | + * specified in the older format consisting of all key/value pairs | ||
82 | + * encoded in the filename. Go ahead and attempt to parse the | ||
83 | + * filename, and see if we can pull out the required options. */ | ||
84 | + r = qemu_rbd_attempt_legacy_options(options, &opts, &keypairs); | ||
85 | + if (r < 0) { | ||
86 | + error_propagate(errp, local_err); | ||
87 | + goto out; | ||
88 | + } | ||
89 | + /* Take care whenever deciding to actually deprecate; once this ability | ||
90 | + * is removed, we will not be able to open any images with legacy-styled | ||
91 | + * backing image strings. */ | ||
92 | + error_report("RBD options encoded in the filename as keyvalue pairs " | ||
93 | + "is deprecated. Future versions may cease to parse " | ||
94 | + "these options in the future."); | ||
95 | } | ||
96 | |||
97 | /* Remove the processed options from the QDict (the visitor processes | ||
98 | -- | ||
99 | 2.17.1 | ||
100 | |||
101 | diff view generated by jsdifflib |
Deleted patch | |||
---|---|---|---|
1 | This is a small test that will check for the ability to parse | ||
2 | both legacy and modern options for rbd. | ||
3 | 1 | ||
4 | The way the test is set up is for failure to occur, but without | ||
5 | having to wait to timeout on a non-existent rbd server. The error | ||
6 | messages in the success path show that the arguments were parsed. | ||
7 | |||
8 | The failure behavior prior to the patch series that has this test, is | ||
9 | qemu-img complaining about mandatory options (e.g. 'pool') not being | ||
10 | provided. | ||
11 | |||
12 | Reviewed-by: Eric Blake <eblake@redhat.com> | ||
13 | Signed-off-by: Jeff Cody <jcody@redhat.com> | ||
14 | Message-id: f830580e339b974a83ed4870d11adcdc17f49a47.1536704901.git.jcody@redhat.com | ||
15 | Signed-off-by: Jeff Cody <jcody@redhat.com> | ||
16 | --- | ||
17 | tests/qemu-iotests/231 | 62 ++++++++++++++++++++++++++++++++++++++ | ||
18 | tests/qemu-iotests/231.out | 9 ++++++ | ||
19 | tests/qemu-iotests/group | 1 + | ||
20 | 3 files changed, 72 insertions(+) | ||
21 | create mode 100755 tests/qemu-iotests/231 | ||
22 | create mode 100644 tests/qemu-iotests/231.out | ||
23 | |||
24 | diff --git a/tests/qemu-iotests/231 b/tests/qemu-iotests/231 | ||
25 | new file mode 100755 | ||
26 | index XXXXXXX..XXXXXXX | ||
27 | --- /dev/null | ||
28 | +++ b/tests/qemu-iotests/231 | ||
29 | @@ -XXX,XX +XXX,XX @@ | ||
30 | +#!/bin/bash | ||
31 | +# | ||
32 | +# Test legacy and modern option parsing for rbd/ceph. This will not | ||
33 | +# actually connect to a ceph server, but rather looks for the appropriate | ||
34 | +# error message that indicates we parsed the options correctly. | ||
35 | +# | ||
36 | +# Copyright (C) 2018 Red Hat, Inc. | ||
37 | +# | ||
38 | +# This program is free software; you can redistribute it and/or modify | ||
39 | +# it under the terms of the GNU General Public License as published by | ||
40 | +# the Free Software Foundation; either version 2 of the License, or | ||
41 | +# (at your option) any later version. | ||
42 | +# | ||
43 | +# This program is distributed in the hope that it will be useful, | ||
44 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
45 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
46 | +# GNU General Public License for more details. | ||
47 | +# | ||
48 | +# You should have received a copy of the GNU General Public License | ||
49 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
50 | +# | ||
51 | + | ||
52 | +# creator | ||
53 | +owner=jcody@redhat.com | ||
54 | + | ||
55 | +seq=`basename $0` | ||
56 | +echo "QA output created by $seq" | ||
57 | + | ||
58 | +here=`pwd` | ||
59 | +status=1 # failure is the default! | ||
60 | + | ||
61 | +_cleanup() | ||
62 | +{ | ||
63 | + rm "${BOGUS_CONF}" | ||
64 | +} | ||
65 | +trap "_cleanup; exit \$status" 0 1 2 3 15 | ||
66 | + | ||
67 | +# get standard environment, filters and checks | ||
68 | +. ./common.rc | ||
69 | +. ./common.filter | ||
70 | + | ||
71 | +_supported_fmt generic | ||
72 | +_supported_proto rbd | ||
73 | +_supported_os Linux | ||
74 | + | ||
75 | +BOGUS_CONF=${TEST_DIR}/ceph-$$.conf | ||
76 | +touch "${BOGUS_CONF}" | ||
77 | + | ||
78 | +_filter_conf() | ||
79 | +{ | ||
80 | + sed -e "s#$BOGUS_CONF#BOGUS_CONF#g" | ||
81 | +} | ||
82 | + | ||
83 | +# We expect this to fail, with no monitor ip provided and a null conf file. Just want it | ||
84 | +# to fail in the right way. | ||
85 | +$QEMU_IMG info "json:{'file.driver':'rbd','file.filename':'rbd:rbd/bogus:conf=${BOGUS_CONF}'}" 2>&1 | _filter_conf | ||
86 | +$QEMU_IMG info "json:{'file.driver':'rbd','file.pool':'rbd','file.image':'bogus','file.conf':'${BOGUS_CONF}'}" 2>&1 | _filter_conf | ||
87 | + | ||
88 | +# success, all done | ||
89 | +echo "*** done" | ||
90 | +rm -f $seq.full | ||
91 | +status=0 | ||
92 | diff --git a/tests/qemu-iotests/231.out b/tests/qemu-iotests/231.out | ||
93 | new file mode 100644 | ||
94 | index XXXXXXX..XXXXXXX | ||
95 | --- /dev/null | ||
96 | +++ b/tests/qemu-iotests/231.out | ||
97 | @@ -XXX,XX +XXX,XX @@ | ||
98 | +QA output created by 231 | ||
99 | +qemu-img: RBD options encoded in the filename as keyvalue pairs is deprecated. Future versions may cease to parse these options in the future. | ||
100 | +unable to get monitor info from DNS SRV with service name: ceph-mon | ||
101 | +no monitors specified to connect to. | ||
102 | +qemu-img: Could not open 'json:{'file.driver':'rbd','file.filename':'rbd:rbd/bogus:conf=BOGUS_CONF'}': error connecting: No such file or directory | ||
103 | +unable to get monitor info from DNS SRV with service name: ceph-mon | ||
104 | +no monitors specified to connect to. | ||
105 | +qemu-img: Could not open 'json:{'file.driver':'rbd','file.pool':'rbd','file.image':'bogus','file.conf':'BOGUS_CONF'}': error connecting: No such file or directory | ||
106 | +*** done | ||
107 | diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group | ||
108 | index XXXXXXX..XXXXXXX 100644 | ||
109 | --- a/tests/qemu-iotests/group | ||
110 | +++ b/tests/qemu-iotests/group | ||
111 | @@ -XXX,XX +XXX,XX @@ | ||
112 | 226 auto quick | ||
113 | 227 auto quick | ||
114 | 229 auto quick | ||
115 | +231 auto quick | ||
116 | -- | ||
117 | 2.17.1 | ||
118 | |||
119 | diff view generated by jsdifflib |
Deleted patch | |||
---|---|---|---|
1 | Signed-off-by: Jeff Cody <jcody@redhat.com> | ||
2 | Message-id: 647f5b5ab7efd8bf567a504c832b1d2d6f719b23.1536704901.git.jcody@redhat.com | ||
3 | Signed-off-by: Jeff Cody <jcody@redhat.com> | ||
4 | --- | ||
5 | qemu-deprecated.texi | 15 +++++++++++++++ | ||
6 | 1 file changed, 15 insertions(+) | ||
7 | 1 | ||
8 | diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi | ||
9 | index XXXXXXX..XXXXXXX 100644 | ||
10 | --- a/qemu-deprecated.texi | ||
11 | +++ b/qemu-deprecated.texi | ||
12 | @@ -XXX,XX +XXX,XX @@ used instead. | ||
13 | In order to prevent QEMU from automatically opening an image's backing | ||
14 | chain, use ``"backing": null'' instead. | ||
15 | |||
16 | +@subsubsection rbd keyvalue pair encoded filenames: "" (since 3.1.0) | ||
17 | + | ||
18 | +Options for ``rbd'' should be specified according to its runtime options, | ||
19 | +like other block drivers. Legacy parsing of keyvalue pair encoded | ||
20 | +filenames is useful to open images with the old format for backing files; | ||
21 | +These image files should be updated to use the current format. | ||
22 | + | ||
23 | +Example of legacy encoding: | ||
24 | + | ||
25 | +@code{json:@{"file.driver":"rbd", "file.filename":"rbd:rbd/name"@}} | ||
26 | + | ||
27 | +The above, converted to the current supported format: | ||
28 | + | ||
29 | +@code{json:@{"file.driver":"rbd", "file.pool":"rbd", "file.image":"name"@}} | ||
30 | + | ||
31 | @subsection vio-spapr-device device options | ||
32 | |||
33 | @subsubsection "irq": "" (since 3.0.0) | ||
34 | -- | ||
35 | 2.17.1 | ||
36 | |||
37 | diff view generated by jsdifflib |