qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/2] blockdev-backup: add bitmap argument


From: John Snow
Subject: Re: [Qemu-devel] [PATCH 1/2] blockdev-backup: add bitmap argument
Date: Thu, 13 Sep 2018 15:52:50 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1


On 08/30/2018 05:16 PM, John Snow wrote:
> 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: John Snow <address@hidden>
> ---
>  blockdev.c           | 16 +++++++++++++++-
>  qapi/block-core.json |  7 ++++++-
>  2 files changed, 21 insertions(+), 2 deletions(-)
> 
> diff --git a/blockdev.c b/blockdev.c
> index 72f5347df5..b9f19afacc 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -3491,6 +3491,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;
> @@ -3541,6 +3542,19 @@ 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;
>      }
> @@ -3548,7 +3562,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) {
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index 4c7a37afdc..d3ea281039 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -1315,6 +1315,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)
>  #
> @@ -1346,7 +1350,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' } }
> 

I'll be staging this patch (and not the hack that follows it), if there
are no objections.

Thanks, applied to my bitmaps tree:

https://github.com/jnsnow/qemu/commits/bitmaps
https://github.com/jnsnow/qemu.git

--js



reply via email to

[Prev in Thread] Current Thread [Next in Thread]