Commit 945c1ee0 authored by John Snow's avatar John Snow
Browse files

blockdev-backup: add bitmap argument



It is only an oversight that we don't allow incremental backup with
blockdev-backup. Add the bitmap argument which enables this.

Signed-off-by: default avatarJohn Snow <jsnow@redhat.com>
Message-id: 20180830211605.13683-2-jsnow@redhat.com
Signed-off-by: default avatarJohn Snow <jsnow@redhat.com>
parent 62b658db
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -3545,6 +3545,7 @@ BlockJob *do_blockdev_backup(BlockdevBackup *backup, JobTxn *txn,
    BlockDriverState *bs;
    BlockDriverState *target_bs;
    Error *local_err = NULL;
    BdrvDirtyBitmap *bmap = NULL;
    AioContext *aio_context;
    BlockJob *job = NULL;
    int job_flags = JOB_DEFAULT;
@@ -3595,6 +3596,21 @@ BlockJob *do_blockdev_backup(BlockdevBackup *backup, JobTxn *txn,
            goto out;
        }
    }

    if (backup->has_bitmap) {
        bmap = bdrv_find_dirty_bitmap(bs, backup->bitmap);
        if (!bmap) {
            error_setg(errp, "Bitmap '%s' could not be found", backup->bitmap);
            goto out;
        }
        if (bdrv_dirty_bitmap_qmp_locked(bmap)) {
            error_setg(errp,
                       "Bitmap '%s' is currently locked and cannot be used for "
                       "backup", backup->bitmap);
            goto out;
        }
    }

    if (!backup->auto_finalize) {
        job_flags |= JOB_MANUAL_FINALIZE;
    }
@@ -3602,7 +3618,7 @@ BlockJob *do_blockdev_backup(BlockdevBackup *backup, JobTxn *txn,
        job_flags |= JOB_MANUAL_DISMISS;
    }
    job = backup_job_create(backup->job_id, bs, target_bs, backup->speed,
                            backup->sync, NULL, backup->compress,
                            backup->sync, bmap, backup->compress,
                            backup->on_source_error, backup->on_target_error,
                            job_flags, NULL, NULL, txn, &local_err);
    if (local_err != NULL) {
+6 −1
Original line number Diff line number Diff line
@@ -1316,6 +1316,10 @@
# @speed: the maximum speed, in bytes per second. The default is 0,
#         for unlimited.
#
# @bitmap: the name of dirty bitmap if sync is "incremental".
#          Must be present if sync is "incremental", must NOT be present
#          otherwise. (Since 3.1)
#
# @compress: true to compress data, if the target format supports it.
#            (default: false) (since 2.8)
#
@@ -1348,7 +1352,8 @@
##
{ 'struct': 'BlockdevBackup',
  'data': { '*job-id': 'str', 'device': 'str', 'target': 'str',
            'sync': 'MirrorSyncMode', '*speed': 'int', '*compress': 'bool',
            'sync': 'MirrorSyncMode', '*speed': 'int',
            '*bitmap': 'str', '*compress': 'bool',
            '*on-source-error': 'BlockdevOnError',
            '*on-target-error': 'BlockdevOnError',
            '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } }