From: Stefan Hajnoczi Date: Mon, 24 Jun 2013 15:13:18 +0000 (+0200) Subject: blockdev: add Abort transaction X-Git-Tag: v1.6.0-rc0~174^2~9 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=78b18b78aa89c28aecbd007ae1967c978d39bfd6;p=users%2Fdwmw2%2Fqemu.git blockdev: add Abort transaction The Abort action can be used to test QMP 'transaction' failure. Add it as the last action to exercise the .abort() and .cleanup() code paths for all previous actions. Reviewed-by: Kevin Wolf Signed-off-by: Stefan Hajnoczi Signed-off-by: Kevin Wolf --- diff --git a/blockdev.c b/blockdev.c index 6200c0dc0a..b3a57e0c1d 100644 --- a/blockdev.c +++ b/blockdev.c @@ -963,6 +963,16 @@ static void drive_backup_abort(BlkTransactionState *common) } } +static void abort_prepare(BlkTransactionState *common, Error **errp) +{ + error_setg(errp, "Transaction aborted using Abort action"); +} + +static void abort_commit(BlkTransactionState *common) +{ + assert(false); /* this action never succeeds */ +} + static const BdrvActionOps actions[] = { [TRANSACTION_ACTION_KIND_BLOCKDEV_SNAPSHOT_SYNC] = { .instance_size = sizeof(ExternalSnapshotState), @@ -975,6 +985,11 @@ static const BdrvActionOps actions[] = { .prepare = drive_backup_prepare, .abort = drive_backup_abort, }, + [TRANSACTION_ACTION_KIND_ABORT] = { + .instance_size = sizeof(BlkTransactionState), + .prepare = abort_prepare, + .commit = abort_commit, + }, }; /* diff --git a/qapi-schema.json b/qapi-schema.json index 714108dc12..6590307812 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -1659,6 +1659,16 @@ '*on-source-error': 'BlockdevOnError', '*on-target-error': 'BlockdevOnError' } } +## +# @Abort +# +# This action can be used to test transaction failure. +# +# Since: 1.6 +### +{ 'type': 'Abort', + 'data': { } } + ## # @TransactionAction # @@ -1668,7 +1678,8 @@ { 'union': 'TransactionAction', 'data': { 'blockdev-snapshot-sync': 'BlockdevSnapshot', - 'drive-backup': 'DriveBackup' + 'drive-backup': 'DriveBackup', + 'abort': 'Abort' } } ##