On 01/16/2018 07:54 AM, Vladimir Sementsov-Ogievskiy wrote:
Hi all.
There are three qmp commands, needed to implement external backup API.
Using these three commands, client may do all needed bitmap management by
hand:
on backup start we need to do a transaction:
{disable old bitmap, create new bitmap}
on backup success:
drop old bitmap
on backup fail:
enable old bitmap
merge new bitmap to old bitmap
drop new bitmap
v2: fix merge command deadlock
add new patches: 1 and 6
Vladimir Sementsov-Ogievskiy (6):
block: maintain persistent disabled bitmaps
block/dirty-bitmap: add lock to bdrv_enable/disable_dirty_bitmap
qapi: add block-dirty-bitmap-enable/disable
qmp: transaction support for block-dirty-bitmap-enable/disable
qapi: add block-dirty-bitmap-merge
qapi: add disabled parameter to block-dirty-bitmap-add
qapi/block-core.json | 92 ++++++++++++++++++++++-
qapi/transaction.json | 4 +
block/qcow2.h | 2 +-
include/block/dirty-bitmap.h | 3 +-
block/dirty-bitmap.c | 42 ++++++-----
block/qcow2-bitmap.c | 12 +--
block/qcow2.c | 2 +-
blockdev.c | 169 +++++++++++++++++++++++++++++++++++++++++--
8 files changed, 287 insertions(+), 39 deletions(-)
Fails to apply to master (b384cd95) on patch four and five. Only
contextual problems, I've patched it up and I'll review that.
(mirrored here if you want to check my rebase work:
https://github.com/jnsnow/qemu/tree/vlad-review)
Since I was full of such bad and stupid ideas last time, I'd like
someone else to look over this one for design and I'll just review it
for accuracy.
--js