From: Jeff Cody <jcody@redhat.com>
To: Kevin Wolf <kwolf@redhat.com>
Cc: stefanha@redhat.com, pbonzini@redhat.com,
Fam Zheng <famz@redhat.com>,
qemu-devel@nongnu.org, qemu-block@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v6 09/12] block: Add "drained begin/end" for internal snapshot
Date: Thu, 22 Oct 2015 07:05:51 -0400 [thread overview]
Message-ID: <20151022110551.GA1600@localhost.localdomain> (raw)
In-Reply-To: <20151022101811.GD3941@noname.redhat.com>
On Thu, Oct 22, 2015 at 12:18:11PM +0200, Kevin Wolf wrote:
> Am 22.10.2015 um 08:32 hat Fam Zheng geschrieben:
> > This ensures the atomicity of the transaction by avoiding processing of
> > external requests such as those from ioeventfd.
> >
> > state->bs is assigned right after bdrv_drained_begin. Because it was
> > used as the flag for deletion or not in abort, now we need a separate
> > flag - InternalSnapshotState.created.
> >
> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > ---
> > blockdev.c | 9 +++++++--
> > 1 file changed, 7 insertions(+), 2 deletions(-)
> >
> > diff --git a/blockdev.c b/blockdev.c
> > index 52f44b2..adc0e69 100644
> > --- a/blockdev.c
> > +++ b/blockdev.c
> > @@ -1370,6 +1370,7 @@ typedef struct InternalSnapshotState {
> > BlockDriverState *bs;
> > AioContext *aio_context;
> > QEMUSnapshotInfo sn;
> > + bool created;
> > } InternalSnapshotState;
> >
> > static void internal_snapshot_prepare(BlkTransactionState *common,
> > @@ -1414,6 +1415,9 @@ static void internal_snapshot_prepare(BlkTransactionState *common,
> > }
> > bs = blk_bs(blk);
> >
> > + state->bs = bs;
> > + bdrv_drained_begin(bs);
> > +
> > if (bdrv_op_is_blocked(bs, BLOCK_OP_TYPE_INTERNAL_SNAPSHOT, errp)) {
> > return;
> > }
>
> More context:
>
> /* AioContext is released in .clean() */
> state->aio_context = blk_get_aio_context(blk);
> aio_context_acquire(state->aio_context);
>
> if (!blk_is_available(blk)) {
> error_setg(errp, QERR_DEVICE_HAS_NO_MEDIUM, device);
> return;
> }
> bs = blk_bs(blk);
>
> state->bs = bs;
> bdrv_drained_begin(bs);
>
> If we error out because of !blk_is_available(blk), we will still call
> bdrv_drained_end() in .clean even though bdrv_drained_begin() hasn't
> been called yet.
>
Right, if the bdrv_drained_begin() is moved down as it is in this
patch, then the state->aio_context assignment needs moved down as
well.
next prev parent reply other threads:[~2015-10-22 11:06 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-22 6:32 [Qemu-devel] [PATCH v6 00/12] block: Protect nested event loop with bdrv_drained_begin and bdrv_drained_end Fam Zheng
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 01/12] aio: Add "is_external" flag for event handlers Fam Zheng
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 02/12] nbd: Mark fd handlers client type as "external" Fam Zheng
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 03/12] dataplane: Mark host notifiers' " Fam Zheng
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 04/12] aio: introduce aio_{disable, enable}_external Fam Zheng
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 05/12] block: Introduce "drained begin/end" API Fam Zheng
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 06/12] block: Add "drained begin/end" for transactional external snapshot Fam Zheng
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 07/12] block: Add "drained begin/end" for transactional backup Fam Zheng
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 08/12] block: Add "drained begin/end" for transactional blockdev-backup Fam Zheng
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 09/12] block: Add "drained begin/end" for internal snapshot Fam Zheng
2015-10-22 10:18 ` Kevin Wolf
2015-10-22 11:05 ` Jeff Cody [this message]
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 10/12] block: Introduce BlockDriver.bdrv_drain callback Fam Zheng
2015-10-22 6:32 ` [Qemu-devel] [PATCH v6 11/12] qed: Implement .bdrv_drain Fam Zheng
2015-10-22 10:53 ` Kevin Wolf
2015-10-22 20:59 ` Paolo Bonzini
2015-10-23 3:07 ` Fam Zheng
2015-10-22 6:33 ` [Qemu-devel] [PATCH v6 12/12] tests: Add test case for aio_disable_external Fam Zheng
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=20151022110551.GA1600@localhost.localdomain \
--to=jcody@redhat.com \
--cc=famz@redhat.com \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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.