From: Kevin Wolf <kwolf@redhat.com>
To: Alberto Garcia <berto@igalia.com>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org,
Max Reitz <mreitz@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 4/7] block: Add "read-only" to the options QDict
Date: Thu, 15 Sep 2016 12:51:27 +0200 [thread overview]
Message-ID: <20160915105127.GD4726@noname.redhat.com> (raw)
In-Reply-To: <af68323e39cb61bc54d42da8001466906dc855fc.1473867967.git.berto@igalia.com>
Am 14.09.2016 um 17:52 hat Alberto Garcia geschrieben:
> This adds the "read-only" option to the QDict. One important effect of
> this change is that when a child inherits options from its parent, the
> existing "read-only" mode can be preserved if it was explicitly set
> previously.
>
> This addresses scenarios like this:
>
> [E] <- [D] <- [C] <- [B] <- [A]
>
> In this case, if we reopen [D] with read-only=off, and later reopen
> [B], then [D] will not inherit read-only=on from its parent during the
> bdrv_reopen_queue_child() stage.
>
> The BDRV_O_RDWR flag is not removed yet, but its keep in sync with the
> value of the "read-only" option.
>
> Signed-off-by: Alberto Garcia <berto@igalia.com>
> ---
> block.c | 35 ++++++++++++++++++++++++++++++++---
> block/vvfat.c | 3 ++-
> blockdev.c | 16 +++++++++++-----
> include/block/block.h | 1 +
> 4 files changed, 46 insertions(+), 9 deletions(-)
>
> diff --git a/block.c b/block.c
> index f56d703..cf9c513 100644
> --- a/block.c
> +++ b/block.c
> @@ -707,6 +707,9 @@ static void bdrv_inherited_options(int *child_flags, QDict *child_options,
> qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_DIRECT);
> qdict_copy_default(child_options, parent_options, BDRV_OPT_CACHE_NO_FLUSH);
>
> + /* Inherit the read-only option from the parent if it's not set */
> + qdict_copy_default(child_options, parent_options, BDRV_OPT_READ_ONLY);
> +
> /* Our block drivers take care to send flushes and respect unmap policy,
> * so we can default to enable both on lower layers regardless of the
> * corresponding parent options. */
We need another qdict_copy_default() in bdrv_temp_snapshot_options(), I
think, so that flags and options stay consistent there.
Currently it seems to be working because we still have the flag and the
flag is what is actually used in bdrv_open_common(). This means that we
parse the "read-only" option into the QemuOpts there, but we never read
it from there. Shouldn't we use the option rather than the flags?
> @@ -677,11 +679,15 @@ static BlockDriverState *bds_tree_init(QDict *bs_opts, Error **errp)
> goto fail;
> }
>
> + read_only = qemu_opt_get_bool(opts, BDRV_OPT_READ_ONLY, false);
> +
> /* bdrv_open() defaults to the values in bdrv_flags (for compatibility
> * with other callers) rather than what we want as the real defaults.
> * Apply the defaults here instead. */
> qdict_set_default_str(bs_opts, BDRV_OPT_CACHE_DIRECT, "off");
> qdict_set_default_str(bs_opts, BDRV_OPT_CACHE_NO_FLUSH, "off");
> + qdict_set_default_str(bs_opts, BDRV_OPT_READ_ONLY,
> + read_only ? "on" : "off");
Why do you parse read_only into the QemuOpts just to add it right back
to bs_opts? Wouldn't it be easier to remove it from qemu_root_bds_opts
and do a simple set_default_str("on") here? (Which is how the cache
options work.)
Kevin
next prev parent reply other threads:[~2016-09-15 10:51 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-14 15:52 [Qemu-devel] [PATCH 0/7] Add "read-only" to the options QDict Alberto Garcia
2016-09-14 15:52 ` [Qemu-devel] [PATCH 1/7] block: Remove bdrv_is_snapshot Alberto Garcia
2016-09-14 16:43 ` Kevin Wolf
2016-09-14 17:07 ` Eric Blake
2016-09-14 15:52 ` [Qemu-devel] [PATCH 2/7] block: Set BDRV_O_ALLOW_RDWR and snapshot_options before storing the flags Alberto Garcia
2016-09-14 16:40 ` Kevin Wolf
2016-09-15 11:24 ` Alberto Garcia
2016-09-15 12:19 ` Kevin Wolf
2016-09-15 12:31 ` Alberto Garcia
2016-09-15 12:50 ` Kevin Wolf
2016-09-15 12:55 ` Alberto Garcia
2016-09-14 18:54 ` [Qemu-devel] [Qemu-block] " Jeff Cody
2016-09-15 9:10 ` Alberto Garcia
2016-09-14 15:52 ` [Qemu-devel] [PATCH 3/7] block: Update bs->open_flags earlier in bdrv_open_common() Alberto Garcia
2016-09-14 16:42 ` Kevin Wolf
2016-09-14 15:52 ` [Qemu-devel] [PATCH 4/7] block: Add "read-only" to the options QDict Alberto Garcia
2016-09-15 10:51 ` Kevin Wolf [this message]
2016-09-15 11:42 ` Alberto Garcia
2016-09-14 15:52 ` [Qemu-devel] [PATCH 5/7] block: Don't queue the same BDS twice in bdrv_reopen_queue_child() Alberto Garcia
2016-09-15 13:04 ` Kevin Wolf
2016-09-14 15:52 ` [Qemu-devel] [PATCH 6/7] commit: Add 'base' to the reopen queue before 'overlay_bs' Alberto Garcia
2016-09-15 13:06 ` Kevin Wolf
2016-09-14 15:52 ` [Qemu-devel] [PATCH 7/7] block: rename "read-only" to BDRV_OPT_READ_ONLY Alberto Garcia
2016-09-15 13:09 ` Kevin Wolf
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=20160915105127.GD4726@noname.redhat.com \
--to=kwolf@redhat.com \
--cc=berto@igalia.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 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).