This patchset adds the ability to take a snapshot of a group of devices, rather than each device individually. Upon failure of any snapshot, all snapshots taken by the command will be abandoned, and the appropriate failure code returned.
This differs from v1 in that: * The QAPI input mechanism for JSON-arrays of qdict items is now used correctly, and there is no modification of the existing monitor code. This drops the original patch 1 from v1. * Rather than use bdrv_close() and bdrv_open() to pivot the snapshot, the fields of the BlockDriverState are manipulated so that there are no irrecoverable failure points in the snapshot process. This is based on a suggestion by Kevin Wolf. * The qapi & block code was broken out into patch 1/2, and the QMP command placed patch 2/2 * Since there are no irrecoverable error points, there is a no need for a command to return a list of failures. There is at most one failure to report, which is the first failure encountered. In light of that, patch 3 from v1 was dropped. Some things for careful review: In patch 1/2, in the new bdrv_append() function: * Are all of the relevant fields preserved in the top bs? (see 'bdrv_append()') * Conversely, are any of the fields being preserved that should not be? * Are there race condition concerns at the end of bdrv_append(), at the line '*bs_top = tmp;', which replaces the contents of the current top bs? Jeff Cody (2): qapi: Introduce blockdev-group-snapshot-sync command QMP: Add qmp command for blockdev-group-snapshot-sync block.c | 47 ++++++++++++++++++++ block.h | 1 + blockdev.c | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ qapi-schema.json | 38 ++++++++++++++++ qmp-commands.hx | 39 ++++++++++++++++ 5 files changed, 253 insertions(+), 0 deletions(-) -- 1.7.9.rc2.1.g69204