[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v5 09/14] block: Add block job transactions
From: |
Max Reitz |
Subject: |
Re: [Qemu-devel] [PATCH v5 09/14] block: Add block job transactions |
Date: |
Fri, 11 Sep 2015 20:34:12 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 |
On 07.09.2015 09:34, Fam Zheng wrote:
> Sometimes block jobs must execute as a transaction group. Finishing
> jobs wait until all other jobs are ready to complete successfully.
> Failure or cancellation of one job cancels the other jobs in the group.
>
> Signed-off-by: Stefan Hajnoczi <address@hidden>
> [Rewrite the implementation which is now contained in block_job_completed.
> --Fam]
> Signed-off-by: Fam Zheng <address@hidden>
> ---
> blockjob.c | 134
> ++++++++++++++++++++++++++++++++++++++++++++++-
> include/block/block.h | 1 +
> include/block/blockjob.h | 38 ++++++++++++++
> 3 files changed, 171 insertions(+), 2 deletions(-)
>
[snip]
> diff --git a/include/block/block.h b/include/block/block.h
> index e619b99..f80d984 100644
> --- a/include/block/block.h
> +++ b/include/block/block.h
[snip]
> @@ -395,4 +398,39 @@ void block_job_defer_to_main_loop(BlockJob *job,
> BlockJobDeferToMainLoopFn *fn,
> void *opaque);
>
> +/**
> + * block_job_txn_new:
> + *
> + * Allocate and return a new block job transaction. Jobs can be added to the
> + * transaction using block_job_txn_add_job().
> + *
> + * The transaction is automatically freed when the last job completes or is
> + * cancelled.
> + *
> + * All jobs in the transaction either complete successfully or fail/cancel
> as a
> + * group. Jobs wait for each other before completing. Cancelling one job
> + * cancels all jobs in the transaction.
> + */
> +BlockJobTxn *block_job_txn_new(void);
> +
> +/**
> + * block_job_txn_unref:
> + *
> + * Release a reference that was previously acquired with
> block_job_txn_add_job
> + * or block_job_txn_new. If it's the last reference to the object, it will be
> + * freed.
> + */
> +void block_job_txn_unref(BlockJobTxn *txn);
> +
> +/**
> + * block_job_txn_add_job:
> + * @txn: The transaction (may be NULL)
> + * @job: Job to add to the transaction
> + *
> + * Add @job to the transaction. The @job must not already be in a
> transaction.
> + * The block job driver must call block_job_txn_prepare_to_complete() before
> + * final cleanup and completion.
This comment still needs a fixup (block_job_txn_prepare_to_complete()
does not exist).
Looks good other than that.
Max
> + */
> +void block_job_txn_add_job(BlockJobTxn *txn, BlockJob *job);
> +
> #endif
>
signature.asc
Description: OpenPGP digital signature
- Re: [Qemu-devel] [PATCH v5 04/14] backup: Extract dirty bitmap handling as a separate function, (continued)
- [Qemu-devel] [PATCH v5 05/14] blockjob: Introduce reference count, Fam Zheng, 2015/09/07
- [Qemu-devel] [PATCH v5 06/14] blockjob: Add .commit and .abort block job actions, Fam Zheng, 2015/09/07
- [Qemu-devel] [PATCH v5 07/14] blockjob: Add "completed" and "ret" in BlockJob, Fam Zheng, 2015/09/07
- [Qemu-devel] [PATCH v5 08/14] blockjob: Simplify block_job_finish_sync, Fam Zheng, 2015/09/07
- [Qemu-devel] [PATCH v5 09/14] block: Add block job transactions, Fam Zheng, 2015/09/07
- Re: [Qemu-devel] [PATCH v5 09/14] block: Add block job transactions, Eric Blake, 2015/09/11
- [Qemu-devel] [PATCH v5 10/14] blockdev: make BlockJobTxn available to qmp 'transaction', Fam Zheng, 2015/09/07
- [Qemu-devel] [PATCH v5 12/14] iotests: 124 - transactional failure test, Fam Zheng, 2015/09/07
- [Qemu-devel] [PATCH v5 11/14] block/backup: support block job transactions, Fam Zheng, 2015/09/07