From: Markus Armbruster <armbru@redhat.com>
To: Max Reitz <mreitz@redhat.com>
Cc: qemu-block@nongnu.org, Kevin Wolf <kwolf@redhat.com>,
qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH for-2.12 2/3] block: Handle null backing link
Date: Tue, 14 Nov 2017 16:17:18 +0100 [thread overview]
Message-ID: <87zi7oritd.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20171110221329.24176-3-mreitz@redhat.com> (Max Reitz's message of "Fri, 10 Nov 2017 23:13:28 +0100")
Max Reitz <mreitz@redhat.com> writes:
> Instead of converting all "backing": null instances into "backing": "",
> handle a null value directly in bdrv_open_inherit().
>
> This enables explicitly null backing links for json:{} filenames.
>
> Signed-off-by: Max Reitz <mreitz@redhat.com>
> ---
> block.c | 2 +-
> blockdev.c | 14 --------------
> tests/qemu-iotests/089 | 20 ++++++++++++++++++++
> tests/qemu-iotests/089.out | 8 ++++++++
> 4 files changed, 29 insertions(+), 15 deletions(-)
>
> diff --git a/block.c b/block.c
> index 85427df577..bc92ddd5a0 100644
> --- a/block.c
> +++ b/block.c
> @@ -2558,7 +2558,7 @@ static BlockDriverState *bdrv_open_inherit(const char *filename,
>
> /* See cautionary note on accessing @options above */
> backing = qdict_get_try_str(options, "backing");
> - if (backing && *backing == '\0') {
> + if (qdict_is_qnull(options, "backing") || (backing && *backing == '\0')) {
> flags |= BDRV_O_NO_BACKING;
> qdict_del(options, "backing");
> }
Consider a comment pointing out "" is deprecated.
See also my reply to PATCH 1/3.
> diff --git a/blockdev.c b/blockdev.c
> index 56a6b24a0b..99ef618b39 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -3885,7 +3885,6 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp)
> QObject *obj;
> Visitor *v = qobject_output_visitor_new(&obj);
> QDict *qdict;
> - const QDictEntry *ent;
> Error *local_err = NULL;
>
> visit_type_BlockdevOptions(v, NULL, &options, &local_err);
> @@ -3899,19 +3898,6 @@ void qmp_blockdev_add(BlockdevOptions *options, Error **errp)
>
> qdict_flatten(qdict);
>
> - /*
> - * Rewrite "backing": null to "backing": ""
> - * TODO Rewrite "" to null instead, and perhaps not even here
> - */
> - for (ent = qdict_first(qdict); ent; ent = qdict_next(qdict, ent)) {
> - char *dot = strrchr(ent->key, '.');
> -
> - if (!strcmp(dot ? dot + 1 : ent->key, "backing")
> - && qobject_type(ent->value) == QTYPE_QNULL) {
> - qdict_put(qdict, ent->key, qstring_new());
> - }
> - }
> -
> if (!qdict_get_try_str(qdict, "node-name")) {
> error_setg(errp, "'node-name' must be specified for the root node");
> goto fail;
> diff --git a/tests/qemu-iotests/089 b/tests/qemu-iotests/089
> index 9bfe2307b3..832eac1248 100755
> --- a/tests/qemu-iotests/089
> +++ b/tests/qemu-iotests/089
> @@ -82,6 +82,26 @@ $QEMU_IO_PROG --cache $CACHEMODE \
> $QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io
>
>
> +echo
> +echo "=== Testing correct handling of 'backing':null ==="
> +echo
> +
> +_make_test_img -b "$TEST_IMG.base" $IMG_SIZE
> +
> +# This should read 42
> +$QEMU_IO -c 'read -P 42 0 512' "$TEST_IMG" | _filter_qemu_io
> +
> +# This should read 0
> +$QEMU_IO -c 'read -P 0 0 512' "json:{\
> + 'driver': '$IMGFMT',
> + 'file': {
> + 'driver': 'file',
> + 'filename': '$TEST_IMG'
> + },
> + 'backing': null
> +}" | _filter_qemu_io
> +
> +
> # Taken from test 071
> echo
> echo "=== Testing blkdebug ==="
> diff --git a/tests/qemu-iotests/089.out b/tests/qemu-iotests/089.out
> index 18f5fdda7a..607a9c6d9c 100644
> --- a/tests/qemu-iotests/089.out
> +++ b/tests/qemu-iotests/089.out
> @@ -19,6 +19,14 @@ Pattern verification failed at offset 0, 512 bytes
> read 512/512 bytes at offset 0
> 512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
>
> +=== Testing correct handling of 'backing':null ===
> +
> +Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864 backing_file=TEST_DIR/t.IMGFMT.base
> +read 512/512 bytes at offset 0
> +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +read 512/512 bytes at offset 0
> +512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> +
> === Testing blkdebug ===
>
> Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
Reviewed-by: Markus Armbruster <armbru@redhat.com>
next prev parent reply other threads:[~2017-11-14 15:17 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-10 22:13 [Qemu-devel] [PATCH for-2.12 0/3] block: Handle null backing link Max Reitz
2017-11-10 22:13 ` [Qemu-devel] [PATCH for-2.12 1/3] qapi: Add qdict_is_null() Max Reitz
2017-11-10 22:19 ` Eric Blake
2017-11-14 14:07 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-11-14 14:15 ` Max Reitz
2017-11-14 14:57 ` [Qemu-devel] " Markus Armbruster
2017-11-14 14:59 ` Max Reitz
2017-11-15 6:51 ` Markus Armbruster
2017-11-10 22:13 ` [Qemu-devel] [PATCH for-2.12 2/3] block: Handle null backing link Max Reitz
2017-11-10 22:22 ` Eric Blake
2017-11-10 22:26 ` Max Reitz
2017-11-14 14:06 ` [Qemu-devel] [Qemu-block] " Alberto Garcia
2017-11-14 15:17 ` Markus Armbruster [this message]
2017-11-14 15:19 ` [Qemu-devel] " Max Reitz
2017-11-10 22:13 ` [Qemu-devel] [PATCH for-2.12 3/3] block: Deprecate "backing": "" Max Reitz
2017-11-10 22:21 ` Eric Blake
2017-11-13 10:25 ` Daniel P. Berrange
2017-11-14 15:19 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87zi7oritd.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.