[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v6 3/3] block/stream: introduce a bottom node
From: |
Max Reitz |
Subject: |
Re: [Qemu-devel] [PATCH v6 3/3] block/stream: introduce a bottom node |
Date: |
Tue, 28 May 2019 19:33:51 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 |
On 06.05.19 17:34, Vladimir Sementsov-Ogievskiy wrote:
> From: Andrey Shinkevich <address@hidden>
>
> The bottom node is the intermediate block device that has the base as its
> backing image. It is used instead of the base node while a block stream
> job is running to avoid dependency on the base that may change due to the
> parallel jobs. The change may take place due to a filter node as well that
> is inserted between the base and the intermediate bottom node. It occurs
> when the base node is the top one for another commit or stream job.
> After the introduction of the bottom node, don't freeze its backing child,
> that's the base, anymore.
>
> Suggested-by: Vladimir Sementsov-Ogievskiy <address@hidden>
> Signed-off-by: Andrey Shinkevich <address@hidden>
> Reviewed-by: Vladimir Sementsov-Ogievskiy <address@hidden>
> Reviewed-by: Alberto Garcia <address@hidden>
> ---
> block/stream.c | 49 +++++++++++++++++++++---------------------
> tests/qemu-iotests/245 | 4 ++--
> 2 files changed, 27 insertions(+), 26 deletions(-)
>
> diff --git a/block/stream.c b/block/stream.c
> index 65b13b27e0..fc97c89f81 100644
> --- a/block/stream.c
> +++ b/block/stream.c
[...]
> @@ -248,26 +250,25 @@ void stream_start(const char *job_id, BlockDriverState
> *bs,
> * already have our own plans. Also don't allow resize as the image size
> is
> * queried only at the job start and then cached. */
> s = block_job_create(job_id, &stream_job_driver, NULL, bs,
> - BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE_UNCHANGED
> |
> - BLK_PERM_GRAPH_MOD,
> - BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE_UNCHANGED
> |
> - BLK_PERM_WRITE,
> + basic_flags | BLK_PERM_GRAPH_MOD,
> + basic_flags | BLK_PERM_WRITE,
> speed, creation_flags, NULL, NULL, errp);
> if (!s) {
> goto fail;
> }
>
> - /* Block all intermediate nodes between bs and base, because they will
> - * disappear from the chain after this operation. The streaming job reads
> - * every block only once, assuming that it doesn't change, so block
> writes
> - * and resizes. */
> - for (iter = backing_bs(bs); iter && iter != base; iter =
> backing_bs(iter)) {
> - block_job_add_bdrv(&s->common, "intermediate node", iter, 0,
> - BLK_PERM_CONSISTENT_READ |
> BLK_PERM_WRITE_UNCHANGED,
> - &error_abort);
> + /*
> + * Block all intermediate nodes between bs and bottom (inclusive),
> because
> + * they will disappear from the chain after this operation. The streaming
> + * job reads every block only once, assuming that it doesn't change, so
> + * forbid writes and resizes.
> + */
> + for (iter = bs; iter != bottom; iter = backing_bs(iter)) {
> + block_job_add_bdrv(&s->common, "intermediate node", backing_bs(iter),
> + 0, basic_flags, &error_abort);
I don’t understand this change. Isn’t it doing exactly the same as before?
(If so, I just find it harder to read because every iteration isn’t
about @iter but backing_bs(iter).)
The rest looks good to me.
Max
> }
>
> - s->base = base;
> + s->bottom = bottom;
> s->backing_file_str = g_strdup(backing_file_str);
> s->bs_read_only = bs_read_only;
> s->chain_frozen = true;
signature.asc
Description: OpenPGP digital signature
Re: [Qemu-devel] [PATCH v6 0/3] block/stream: get rid of the base, Vladimir Sementsov-Ogievskiy, 2019/05/21