All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, armbru@redhat.com,
	qemu-devel@nongnu.org, andrey.shinkevich@virtuozzo.com,
	den@openvz.org, mreitz@redhat.com, jsnow@redhat.com,
	dgilbert@redhat.com
Subject: [PATCH 2/7] stream: exclude a link to filter from freezing
Date: Mon, 20 Apr 2020 21:36:41 +0300	[thread overview]
Message-ID: <1587407806-109784-3-git-send-email-andrey.shinkevich@virtuozzo.com> (raw)
In-Reply-To: <1587407806-109784-1-git-send-email-andrey.shinkevich@virtuozzo.com>

A node above the base can be the filter of the concurrent job. In that
case, the filter cannot be removed being a part of the frozen chain.
Exclude the link to filter node from freezing and provide the safety
check for a concurrent job.

Signed-off-by: Andrey Shinkevich <andrey.shinkevich@virtuozzo.com>
---
 block/stream.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/block/stream.c b/block/stream.c
index bd4a351..d8b4bbe 100644
--- a/block/stream.c
+++ b/block/stream.c
@@ -244,7 +244,7 @@ void stream_start(const char *job_id, BlockDriverState *bs,
          above_base = bdrv_filtered_bs(above_base))
     {}
 
-    if (bdrv_freeze_chain(bs, above_base, errp) < 0) {
+    if (bdrv_freeze_chain(bs, bottom_cow_node, errp) < 0) {
         return;
     }
 
@@ -257,6 +257,15 @@ void stream_start(const char *job_id, BlockDriverState *bs,
         }
     }
 
+    /*
+     * Check for an overlapping block-commit job that is not allowed.
+     */
+    if (bdrv_freeze_chain(bottom_cow_node, above_base, errp) < 0) {
+        goto fail;
+    } else {
+        bdrv_unfreeze_chain(bottom_cow_node, above_base);
+    }
+
     /* Prevent concurrent jobs trying to modify the graph structure here, we
      * already have our own plans. Also don't allow resize as the image size is
      * queried only at the job start and then cached. */
@@ -276,7 +285,8 @@ void stream_start(const char *job_id, BlockDriverState *bs,
      * bdrv_reopen_set_read_only() due to parallel block jobs running.
      */
     base = bdrv_filtered_bs(above_base);
-    for (iter = bdrv_filtered_bs(bs); iter && iter != base;
+    for (iter = bdrv_filtered_bs(bs);
+         iter && iter != base && iter->drv && !iter->drv->is_filter;
          iter = bdrv_filtered_bs(iter))
     {
         block_job_add_bdrv(&s->common, "intermediate node", iter, 0,
@@ -298,5 +308,5 @@ fail:
     if (bs_read_only) {
         bdrv_reopen_set_read_only(bs, true, NULL);
     }
-    bdrv_unfreeze_chain(bs, above_base);
+    bdrv_unfreeze_chain(bs, bottom_cow_node);
 }
-- 
1.8.3.1



  parent reply	other threads:[~2020-04-20 18:42 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
2020-04-20 18:36 ` Andrey Shinkevich [this message]
2020-04-21 12:27   ` [PATCH 2/7] stream: exclude a link to filter from freezing 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=1587407806-109784-3-git-send-email-andrey.shinkevich@virtuozzo.com \
    --to=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 \
    --cc=vsementsov@virtuozzo.com \
    /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.