Consolidate blockdev_backup_prepare() with do_blockdev_backup() as a first step towards streamlining all functionality through transactions.
Signed-off-by: Sergio Lopez <s...@redhat.com> --- blockdev.c | 64 +++++++++++++----------------------------------------- 1 file changed, 15 insertions(+), 49 deletions(-) diff --git a/blockdev.c b/blockdev.c index 5e85fc042e..128707cdc6 100644 --- a/blockdev.c +++ b/blockdev.c @@ -1940,47 +1940,6 @@ typedef struct BlockdevBackupState { BlockJob *job; } BlockdevBackupState; -static BlockJob *do_blockdev_backup(BlockdevBackup *backup, JobTxn *txn, - Error **errp); - -static void blockdev_backup_prepare(BlkActionState *common, Error **errp) -{ - BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common); - BlockdevBackup *backup; - BlockDriverState *bs, *target; - AioContext *aio_context; - Error *local_err = NULL; - - assert(common->action->type == TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP); - backup = common->action->u.blockdev_backup.data; - - bs = bdrv_lookup_bs(backup->device, backup->device, errp); - if (!bs) { - return; - } - - target = bdrv_lookup_bs(backup->target, backup->target, errp); - if (!target) { - return; - } - - aio_context = bdrv_get_aio_context(bs); - aio_context_acquire(aio_context); - state->bs = bs; - - /* Paired with .clean() */ - bdrv_drained_begin(state->bs); - - state->job = do_blockdev_backup(backup, common->block_job_txn, &local_err); - if (local_err) { - error_propagate(errp, local_err); - goto out; - } - -out: - aio_context_release(aio_context); -} - static void blockdev_backup_commit(BlkActionState *common) { BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common); @@ -3695,32 +3654,39 @@ XDbgBlockGraph *qmp_x_debug_query_block_graph(Error **errp) return bdrv_get_xdbg_block_graph(errp); } -BlockJob *do_blockdev_backup(BlockdevBackup *backup, JobTxn *txn, - Error **errp) +static void blockdev_backup_prepare(BlkActionState *common, Error **errp) { + BlockdevBackupState *state = DO_UPCAST(BlockdevBackupState, common, common); + BlockdevBackup *backup; BlockDriverState *bs; BlockDriverState *target_bs; AioContext *aio_context; - BlockJob *job; + + assert(common->action->type == TRANSACTION_ACTION_KIND_BLOCKDEV_BACKUP); + backup = common->action->u.blockdev_backup.data; bs = bdrv_lookup_bs(backup->device, backup->device, errp); if (!bs) { - return NULL; + return; } target_bs = bdrv_lookup_bs(backup->target, backup->target, errp); if (!target_bs) { - return NULL; + return; } aio_context = bdrv_get_aio_context(bs); aio_context_acquire(aio_context); + state->bs = bs; - job = do_backup_common(qapi_BlockdevBackup_base(backup), - bs, target_bs, aio_context, txn, errp); + /* Paired with .clean() */ + bdrv_drained_begin(state->bs); + + state->job = do_backup_common(qapi_BlockdevBackup_base(backup), + bs, target_bs, aio_context, + common->block_job_txn, errp); aio_context_release(aio_context); - return job; } void qmp_blockdev_backup(BlockdevBackup *arg, Error **errp) -- 2.23.0