All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL v3 25/35] block: Nested drain_end must still call callbacks
Date: Fri, 22 Dec 2017 16:18:36 +0100	[thread overview]
Message-ID: <20171222151846.28110-26-kwolf@redhat.com> (raw)
In-Reply-To: <20171222151846.28110-1-kwolf@redhat.com>

bdrv_do_drained_begin() restricts the call of parent callbacks and
aio_disable_external() to the outermost drain section, but the block
driver callbacks are always called. bdrv_do_drained_end() must match
this behaviour, otherwise nodes stay drained even if begin/end calls
were balanced.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 block/io.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/block/io.c b/block/io.c
index 74d2e5278e..6038a16c58 100644
--- a/block/io.c
+++ b/block/io.c
@@ -273,19 +273,21 @@ void bdrv_drained_begin(BlockDriverState *bs)
 
 void bdrv_drained_end(BlockDriverState *bs)
 {
+    int old_quiesce_counter;
+
     if (qemu_in_coroutine()) {
         bdrv_co_yield_to_drain(bs, false);
         return;
     }
     assert(bs->quiesce_counter > 0);
-    if (atomic_fetch_dec(&bs->quiesce_counter) > 1) {
-        return;
-    }
+    old_quiesce_counter = atomic_fetch_dec(&bs->quiesce_counter);
 
     /* Re-enable things in child-to-parent order */
     bdrv_drain_invoke(bs, false, false);
-    bdrv_parent_drained_end(bs);
-    aio_enable_external(bdrv_get_aio_context(bs));
+    if (old_quiesce_counter == 1) {
+        bdrv_parent_drained_end(bs);
+        aio_enable_external(bdrv_get_aio_context(bs));
+    }
 }
 
 /*
-- 
2.13.6

  parent reply	other threads:[~2017-12-22 15:19 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-22 15:18 [Qemu-devel] [PULL v3 00/35] Block layer patches Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 01/35] block: Formats don't need CONSISTENT_READ with NO_IO Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 02/35] iotests: fix 197 for vpc Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 03/35] block: Make bdrv_drain_invoke() recursive Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 04/35] block: Call .drain_begin only once in bdrv_drain_all_begin() Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 05/35] test-bdrv-drain: Test BlockDriver callbacks for drain Kevin Wolf
2018-01-04 17:24   ` Eric Blake
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 06/35] block: bdrv_drain_recurse(): Remove unused begin parameter Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 07/35] block: Don't wait for requests in bdrv_drain*_end() Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 08/35] block: Unify order in drain functions Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 09/35] block: Don't acquire AioContext in hmp_qemu_io() Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 10/35] qcow2: get rid of qcow2_backing_read1 routine Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 11/35] block: Document that x-blockdev-change breaks quorum children list Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 12/35] nvme: Add tracing Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 13/35] block: Open backing image in force share mode for size probe Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 14/35] block: Remove the obsolete -drive boot=on|off parameter Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 15/35] block: Remove the deprecated -hdachs option Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 16/35] block: Mention -drive cyls/heads/secs/trans/serial/addr in deprecation chapter Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 17/35] block: Remove unused bdrv_requests_pending Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 18/35] block: Assert drain_all is only called from main AioContext Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 19/35] block: Make bdrv_drain() driver callbacks non-recursive Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 20/35] test-bdrv-drain: Test callback for bdrv_drain Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 21/35] test-bdrv-drain: Test bs->quiesce_counter Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 22/35] blockjob: Pause job on draining any job BDS Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 23/35] test-bdrv-drain: Test drain vs. block jobs Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 24/35] block: Don't block_job_pause_all() in bdrv_drain_all() Kevin Wolf
2017-12-22 15:18 ` Kevin Wolf [this message]
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 26/35] test-bdrv-drain: Test nested drain sections Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 27/35] block: Don't notify parents in drain call chain Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 28/35] block: Add bdrv_subtree_drained_begin/end() Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 29/35] test-bdrv-drain: Tests for bdrv_subtree_drain Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 30/35] test-bdrv-drain: Test behaviour in coroutine context Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 31/35] test-bdrv-drain: Recursive draining with multiple parents Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 32/35] block: Allow graph changes in subtree drained section Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 33/35] test-bdrv-drain: Test graph changes in " Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 34/35] commit: Simplify reopen of base Kevin Wolf
2017-12-22 15:18 ` [Qemu-devel] [PULL v3 35/35] block: Keep nodes drained between reopen_queue/multiple Kevin Wolf
2017-12-22 16:33 ` [Qemu-devel] [PULL v3 00/35] Block layer patches no-reply
2018-01-08 15:09 ` Peter Maydell

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=20171222151846.28110-26-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=peter.maydell@linaro.org \
    --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.