From: Max Reitz <mreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>,
Kevin Wolf <kwolf@redhat.com>, Alberto Garcia <berto@igalia.com>,
Eric Blake <eblake@redhat.com>, John Snow <jsnow@redhat.com>
Subject: [Qemu-devel] [PATCH v6 04/25] block: Respect backing bs in bdrv_refresh_filename
Date: Fri, 29 Sep 2017 18:53:26 +0200 [thread overview]
Message-ID: <20170929165347.29658-5-mreitz@redhat.com> (raw)
In-Reply-To: <20170929165347.29658-1-mreitz@redhat.com>
Basically, bdrv_refresh_filename() should respect all children of a
BlockDriverState. However, generally those children are driver-specific,
so this function cannot handle the general case. On the other hand,
there are only few drivers which use other children than @file and
@backing (that being vmdk, quorum, and blkverify).
Most block drivers only use @file and/or @backing (if they use any
children at all). Both can be implemented directly in
bdrv_refresh_filename.
The user overriding the file's filename is already handled, however, the
user overriding the backing file is not. If this is done, opening the
BDS with the plain filename of its file will not be correct, so we may
not set bs->exact_filename in that case.
iotest 051 contains test cases for overwriting the backing file, and so
its output changes with this patch applied (which I consider a good
thing).
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
---
block.c | 12 +++++++++++-
tests/qemu-iotests/051.out | 8 ++++----
tests/qemu-iotests/051.pc.out | 8 ++++----
3 files changed, 19 insertions(+), 9 deletions(-)
diff --git a/block.c b/block.c
index 95258316ec..ba24845960 100644
--- a/block.c
+++ b/block.c
@@ -4928,6 +4928,7 @@ void bdrv_refresh_filename(BlockDriverState *bs)
opts = qdict_new();
has_open_options = append_open_options(opts, bs);
+ has_open_options |= bs->backing_overridden;
/* If no specific options have been given for this BDS, the filename of
* the underlying file should suffice for this one as well */
@@ -4939,11 +4940,20 @@ void bdrv_refresh_filename(BlockDriverState *bs)
* file BDS. The full options QDict of that file BDS should somehow
* contain a representation of the filename, therefore the following
* suffices without querying the (exact_)filename of this BDS. */
- if (bs->file->bs->full_open_options) {
+ if (bs->file->bs->full_open_options &&
+ (!bs->backing || bs->backing->bs->full_open_options))
+ {
qdict_put_str(opts, "driver", drv->format_name);
QINCREF(bs->file->bs->full_open_options);
qdict_put(opts, "file", bs->file->bs->full_open_options);
+ if (bs->backing) {
+ QINCREF(bs->backing->bs->full_open_options);
+ qdict_put(opts, "backing", bs->backing->bs->full_open_options);
+ } else if (bs->backing_overridden && !bs->backing) {
+ qdict_put(opts, "backing", qstring_new());
+ }
+
bs->full_open_options = opts;
} else {
QDECREF(opts);
diff --git a/tests/qemu-iotests/051.out b/tests/qemu-iotests/051.out
index e3c6eaba57..50d5cd07c8 100644
--- a/tests/qemu-iotests/051.out
+++ b/tests/qemu-iotests/051.out
@@ -59,7 +59,7 @@ QEMU X.Y.Z monitor - type 'help' for more information
Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,backing.file.filename=TEST_DIR/t.qcow2.orig,if=none,id=drive0 -nodefaults
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) info block
-drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.orig"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
Removable device: not locked, tray closed
Cache mode: writeback
Backing file: TEST_DIR/t.qcow2.orig (chain depth: 1)
@@ -148,7 +148,7 @@ QEMU_PROG: -drive driver=null-co,cache=invalid_value: invalid cache option
Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) info block
-drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
Removable device: not locked, tray closed
Cache mode: writeback
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
@@ -168,7 +168,7 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) info block
-drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
Removable device: not locked, tray closed
Cache mode: writethrough
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
@@ -188,7 +188,7 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) info block
-drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
Removable device: not locked, tray closed
Cache mode: writeback, ignore flushes
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
diff --git a/tests/qemu-iotests/051.pc.out b/tests/qemu-iotests/051.pc.out
index f2c5622cee..406f83780b 100644
--- a/tests/qemu-iotests/051.pc.out
+++ b/tests/qemu-iotests/051.pc.out
@@ -59,7 +59,7 @@ QEMU X.Y.Z monitor - type 'help' for more information
Testing: -drive file=TEST_DIR/t.qcow2,driver=qcow2,backing.file.filename=TEST_DIR/t.qcow2.orig,if=none,id=drive0 -nodefaults
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) info block
-drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.orig"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
Removable device: not locked, tray closed
Cache mode: writeback
Backing file: TEST_DIR/t.qcow2.orig (chain depth: 1)
@@ -240,7 +240,7 @@ QEMU_PROG: -drive driver=null-co,cache=invalid_value: invalid cache option
Testing: -drive file=TEST_DIR/t.qcow2,cache=writeback,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) info block
-drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
Removable device: not locked, tray closed
Cache mode: writeback
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
@@ -260,7 +260,7 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
Testing: -drive file=TEST_DIR/t.qcow2,cache=writethrough,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) info block
-drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
Removable device: not locked, tray closed
Cache mode: writethrough
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
@@ -280,7 +280,7 @@ backing-file: TEST_DIR/t.qcow2.base (file, read-only)
Testing: -drive file=TEST_DIR/t.qcow2,cache=unsafe,backing.file.filename=TEST_DIR/t.qcow2.base,backing.cache.no-flush=on,backing.node-name=backing,backing.file.node-name=backing-file,file.node-name=file,if=none,id=drive0 -nodefaults
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) info block
-drive0 (NODE_NAME): TEST_DIR/t.qcow2 (qcow2)
+drive0 (NODE_NAME): json:{"backing": {"driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2.base"}}, "driver": "qcow2", "file": {"driver": "file", "filename": "TEST_DIR/t.qcow2"}} (qcow2)
Removable device: not locked, tray closed
Cache mode: writeback, ignore flushes
Backing file: TEST_DIR/t.qcow2.base (chain depth: 1)
--
2.13.6
next prev parent reply other threads:[~2017-09-29 16:54 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-29 16:53 [Qemu-devel] [PATCH v6 00/25] block: Fix some filename generation issues Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 01/25] block/mirror: Small absolute-paths simplification Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 02/25] block: Use children list in bdrv_refresh_filename Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 03/25] block: Add BDS.backing_overridden Max Reitz
2017-09-29 16:53 ` Max Reitz [this message]
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 05/25] block: Make path_combine() return the path Max Reitz
2017-10-26 12:00 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 06/25] block: bdrv_get_full_backing_filename_from_...'s ret. val Max Reitz
2017-10-26 13:23 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 07/25] block: bdrv_get_full_backing_filename's " Max Reitz
2017-10-26 13:52 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 08/25] block: Add bdrv_make_absolute_filename() Max Reitz
2017-10-30 14:25 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 09/25] block: Fix bdrv_find_backing_image() Max Reitz
2017-10-30 14:47 ` Alberto Garcia
2017-11-02 15:45 ` Max Reitz
2017-11-02 15:59 ` Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 10/25] block: Add bdrv_dirname() Max Reitz
2017-10-31 11:05 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 11/25] blkverify: Make bdrv_dirname() return NULL Max Reitz
2017-10-31 11:45 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 12/25] quorum: " Max Reitz
2017-10-31 12:09 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 13/25] block/nbd: " Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 14/25] block/nfs: Implement bdrv_dirname() Max Reitz
2017-10-31 12:29 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 15/25] block: Use bdrv_dirname() for relative filenames Max Reitz
2017-10-31 13:52 ` Alberto Garcia
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 16/25] block: Add 'base-directory' BDS option Max Reitz
2017-11-02 14:40 ` Alberto Garcia
2017-11-02 16:07 ` Max Reitz
2017-11-02 22:06 ` Eric Blake
2017-11-07 12:07 ` Alberto Garcia
2017-11-08 17:09 ` Kevin Wolf
2017-11-08 18:54 ` Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 17/25] iotests: Add quorum case to test 110 Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 18/25] block: Add sgfnt_runtime_opts to BlockDriver Max Reitz
2017-11-02 16:11 ` Alberto Garcia
2017-11-02 16:18 ` Max Reitz
2017-11-08 13:01 ` Alberto Garcia
2017-11-08 17:14 ` Kevin Wolf
2017-11-08 18:52 ` Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 19/25] block: Add BlockDriver.bdrv_gather_child_options Max Reitz
2017-11-08 13:29 ` Alberto Garcia
2017-11-08 17:18 ` Kevin Wolf
2017-11-08 18:52 ` Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 20/25] block: Generically refresh runtime options Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 21/25] block: Purify .bdrv_refresh_filename() Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 22/25] block: Do not copy exact_filename from format file Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 23/25] block: Fix FIXME from "Add BDS.backing_overridden" Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 24/25] block/curl: Implement bdrv_refresh_filename() Max Reitz
2017-09-29 16:53 ` [Qemu-devel] [PATCH v6 25/25] block/null: Generate filename even with latency-ns Max Reitz
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=20170929165347.29658-5-mreitz@redhat.com \
--to=mreitz@redhat.com \
--cc=berto@igalia.com \
--cc=eblake@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).