All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>,
	qemu-block@nongnu.org
Cc: kwolf@redhat.com, armbru@redhat.com, qemu-devel@nongnu.org,
	den@openvz.org, mreitz@redhat.com, jsnow@redhat.com,
	dgilbert@redhat.com
Subject: Re: [PATCH 1/7] block: prepare block-stream for using COR-filter
Date: Tue, 21 Apr 2020 15:23:58 +0300	[thread overview]
Message-ID: <52386567-045e-5e8f-8287-ee8a3edfae72@virtuozzo.com> (raw)
In-Reply-To: <1587407806-109784-2-git-send-email-andrey.shinkevich@virtuozzo.com>

20.04.2020 21:36, Andrey Shinkevich wrote:
> This patch is the first one in the series where the COR-filter node
> will be hard-coded for using in the block-stream job. The job may
> be run with a block-commit job in parallel. Set the condition to
> avoid the job conflicts.

I think, just skipping all filters from checking is wrong.

What is the problem, exactly?

As I understand, we just need the following logic:

stream job, being started with top and base parameters should:

1. calculate bottom-node = non-filter-overlay(base), which assumes finding
last non-filter in a chain from top to base, excluding base

2. I think, we should leave top as is, even if it is filter, it's up to user.

3. add stream-filter above top

4. Take any locks (freeze, op-blockers, etc) on the chain from stream-filter to bottom-node (including both ends), so nobody should touch these nodes. Do not lock any other nodes.

Similarly, commit job, being started with top and base parameters should:

1. I think, if base is a filter, we should set base = non-filter-overlay(base).

2. I think, we should leave top as is, even if it is filter, it's up to user. (hmm, so, commit may be used to remove filters ?)

3. Add commit-filter above top

4. Take any locks (freeze, op-blockers, etc) on the chain from commit-filter to base (including both ends), so nobody should touch these nodes. Do not lock any other nodes.

====

If we make it behave as such, is there still a problem?

> 
> Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
> ---
>   blockdev.c | 7 +++++--
>   1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/blockdev.c b/blockdev.c
> index 758e0b5..72d28ce 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -3297,7 +3297,9 @@ void qmp_block_stream(bool has_job_id, const char *job_id, const char *device,
>       }
>   
>       /* Check for op blockers in the whole chain between bs and base */
> -    for (iter = bs; iter && iter != base_bs; iter = bdrv_filtered_bs(iter)) {
> +    for (iter = bdrv_skip_rw_filters(bs);
> +        iter && iter != bdrv_skip_rw_filters(base_bs);
> +        iter = bdrv_backing_chain_next(iter)) {
>           if (bdrv_op_is_blocked(iter, BLOCK_OP_TYPE_STREAM, errp)) {
>               goto out;
>           }
> @@ -3455,7 +3457,8 @@ void qmp_block_commit(bool has_job_id, const char *job_id, const char *device,
>   
>       assert(bdrv_get_aio_context(base_bs) == aio_context);
>   
> -    for (iter = top_bs; iter != bdrv_filtered_bs(base_bs);
> +    for (iter = bdrv_skip_rw_filters(top_bs);
> +         iter != bdrv_filtered_bs(base_bs);
>            iter = bdrv_filtered_bs(iter))
>       {
>           if (bdrv_op_is_blocked(iter, BLOCK_OP_TYPE_COMMIT_TARGET, errp)) {
> 


-- 
Best regards,
Vladimir


  reply	other threads:[~2020-04-21 12:31 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-20 18:36 [PATCH 0/7] Apply COR-filter to the block-stream permanently Andrey Shinkevich
2020-04-20 18:36 ` [PATCH 1/7] block: prepare block-stream for using COR-filter Andrey Shinkevich
2020-04-21 12:23   ` Vladimir Sementsov-Ogievskiy [this message]
2020-04-20 18:36 ` [PATCH 2/7] stream: exclude a link to filter from freezing Andrey Shinkevich
2020-04-21 12:27   ` Vladimir Sementsov-Ogievskiy
2020-04-20 18:36 ` [PATCH 3/7] block: protect parallel jobs from overlapping Andrey Shinkevich
2020-04-21 12:33   ` Vladimir Sementsov-Ogievskiy
2020-04-20 18:36 ` [PATCH 4/7] copy-on-read: Support refreshing filename Andrey Shinkevich
2020-04-21 12:36   ` Vladimir Sementsov-Ogievskiy
2020-04-20 18:36 ` [PATCH 5/7] qapi: add filter-node-name to block-stream Andrey Shinkevich
2020-04-20 18:43   ` Eric Blake
2020-04-21 12:05   ` Dr. David Alan Gilbert
2020-04-21 12:40   ` Vladimir Sementsov-Ogievskiy
2020-04-21 12:45     ` Vladimir Sementsov-Ogievskiy
2020-04-20 18:36 ` [PATCH 6/7] iotests: prepare 245 for using filter in block-stream Andrey Shinkevich
2020-04-20 18:36 ` [PATCH 7/7] block: apply COR-filter to block-stream jobs Andrey Shinkevich
2020-04-21 12:58   ` Vladimir Sementsov-Ogievskiy
2020-04-27  4:08     ` Andrey Shinkevich
2020-04-27  6:44       ` Vladimir Sementsov-Ogievskiy
2020-04-21 13:12 ` [PATCH 0/7] Apply COR-filter to the block-stream permanently Vladimir Sementsov-Ogievskiy
2020-04-27  4:13   ` Andrey Shinkevich

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=52386567-045e-5e8f-8287-ee8a3edfae72@virtuozzo.com \
    --to=vsementsov@virtuozzo.com \
    --cc=andrey.shinkevich@virtuozzo.com \
    --cc=armbru@redhat.com \
    --cc=den@openvz.org \
    --cc=dgilbert@redhat.com \
    --cc=jsnow@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.