From: John Snow <jsnow@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>, qemu-devel@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>, Jeff Cody <jcody@redhat.com>,
vsementsov@parallels.com, famz@redhat.com, mreitz@redhat.com
Subject: Re: [Qemu-devel] [PATCH 06/10] blockdev: make BlockJobTxn available to qmp 'transaction'
Date: Mon, 29 Jun 2015 18:38:22 -0400 [thread overview]
Message-ID: <5591C8DE.6080809@redhat.com> (raw)
In-Reply-To: <1435234332-581-7-git-send-email-stefanha@redhat.com>
On 06/25/2015 08:12 AM, Stefan Hajnoczi wrote:
> Provide a BlockJobTxn to actions executed in a qmp 'transaction'
> command. This allows actions to make their block jobs either complete
> as a group or fail/cancel together.
>
> The next patch adds the first user.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
> blockdev.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/blockdev.c b/blockdev.c
> index c572950..453f3ec 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -1279,6 +1279,7 @@ typedef struct BlkActionOps {
> struct BlkActionState {
> TransactionAction *action;
> const BlkActionOps *ops;
> + BlockJobTxn *block_job_txn;
> QSIMPLEQ_ENTRY(BlkActionState) entry;
> };
>
> @@ -1883,12 +1884,15 @@ static const BlkActionOps actions[] = {
> void qmp_transaction(TransactionActionList *dev_list, Error **errp)
> {
> TransactionActionList *dev_entry = dev_list;
> + BlockJobTxn *block_job_txn;
> BlkActionState *state, *next;
> Error *local_err = NULL;
>
> QSIMPLEQ_HEAD(snap_bdrv_states, BlkActionState) snap_bdrv_states;
> QSIMPLEQ_INIT(&snap_bdrv_states);
>
> + block_job_txn = block_job_txn_new();
> +
> /* drain all i/o before any operations */
> bdrv_drain_all();
>
> @@ -1908,6 +1912,7 @@ void qmp_transaction(TransactionActionList *dev_list, Error **errp)
> state = g_malloc0(ops->instance_size);
> state->ops = ops;
> state->action = dev_info;
> + state->block_job_txn = block_job_txn;
> QSIMPLEQ_INSERT_TAIL(&snap_bdrv_states, state, entry);
>
> state->ops->prepare(state, &local_err);
> @@ -1917,6 +1922,8 @@ void qmp_transaction(TransactionActionList *dev_list, Error **errp)
> }
> }
>
> + block_job_txn_begin(block_job_txn);
> +
> QSIMPLEQ_FOREACH(state, &snap_bdrv_states, entry) {
> if (state->ops->commit) {
> state->ops->commit(state);
> @@ -1927,6 +1934,8 @@ void qmp_transaction(TransactionActionList *dev_list, Error **errp)
> goto exit;
>
> delete_and_fail:
> + block_job_txn_begin(block_job_txn);
> +
> /* failure, and it is all-or-none; roll back all operations */
> QSIMPLEQ_FOREACH(state, &snap_bdrv_states, entry) {
> if (state->ops->abort) {
>
Reviewed-by: John Snow <jsnow@redhat.com>
next prev parent reply other threads:[~2015-06-29 22:38 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-25 12:12 [Qemu-devel] [PATCH 00/10] block: incremental backup transactions using BlockJobTxn Stefan Hajnoczi
2015-06-25 12:12 ` [Qemu-devel] [PATCH 01/10] qapi: Add transaction support to block-dirty-bitmap operations Stefan Hajnoczi
2015-06-25 12:12 ` [Qemu-devel] [PATCH 02/10] iotests: add transactional incremental backup test Stefan Hajnoczi
2015-06-25 12:12 ` [Qemu-devel] [PATCH 03/10] block: rename BlkTransactionState and BdrvActionOps Stefan Hajnoczi
2015-06-25 12:12 ` [Qemu-devel] [PATCH 04/10] block: keep bitmap if incremental backup job is cancelled Stefan Hajnoczi
2015-06-26 6:00 ` Fam Zheng
2015-06-29 22:36 ` John Snow
2015-06-25 12:12 ` [Qemu-devel] [PATCH 05/10] block: add block job transactions Stefan Hajnoczi
2015-06-26 6:41 ` Fam Zheng
2015-06-29 22:38 ` John Snow
2015-06-30 16:20 ` Stefan Hajnoczi
2015-06-25 12:12 ` [Qemu-devel] [PATCH 06/10] blockdev: make BlockJobTxn available to qmp 'transaction' Stefan Hajnoczi
2015-06-26 6:42 ` Fam Zheng
2015-06-29 22:38 ` John Snow [this message]
2015-06-25 12:12 ` [Qemu-devel] [PATCH 07/10] block/backup: support block job transactions Stefan Hajnoczi
2015-06-26 6:44 ` Fam Zheng
2015-06-29 22:39 ` John Snow
2015-06-30 15:27 ` Stefan Hajnoczi
2015-06-30 15:52 ` John Snow
2015-07-01 8:45 ` Stefan Hajnoczi
2015-06-25 12:12 ` [Qemu-devel] [PATCH 08/10] iotests: 124 - transactional failure test Stefan Hajnoczi
2015-06-25 12:12 ` [Qemu-devel] [PATCH 09/10] qmp-commands.hx: Update the supported 'transaction' operations Stefan Hajnoczi
2015-06-25 12:12 ` [Qemu-devel] [PATCH 10/10] tests: add BlockJobTxn unit test Stefan Hajnoczi
2015-06-26 6:58 ` Fam Zheng
2015-06-29 15:08 ` [Qemu-devel] [PATCH 00/10] block: incremental backup transactions using BlockJobTxn Stefan Hajnoczi
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=5591C8DE.6080809@redhat.com \
--to=jsnow@redhat.com \
--cc=famz@redhat.com \
--cc=jcody@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vsementsov@parallels.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.