[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bit
From: |
Max Reitz |
Subject: |
Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal |
Date: |
Thu, 4 Jul 2019 18:49:09 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 |
On 03.07.19 23:55, John Snow wrote:
> I'm surprised it didn't come up sooner, but sometimes we have a +busy
> bitmap as a source. This is dangerous from the QMP API, but if we are
> the owner that marked the bitmap busy, it's safe to merge it using it as
> a read only source.
>
> It is not safe in the general case to allow users to read from in-use
> bitmaps, so create an internal variant that foregoes the safety
> checking.
>
> Signed-off-by: John Snow <address@hidden>
> ---
> block/dirty-bitmap.c | 51 +++++++++++++++++++++++++++++++++------
> include/block/block_int.h | 3 +++
> 2 files changed, 47 insertions(+), 7 deletions(-)
>
> diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
> index 95a9c2a5d8..b0f76826b3 100644
> --- a/block/dirty-bitmap.c
> +++ b/block/dirty-bitmap.c
> @@ -810,11 +810,15 @@ bool bdrv_dirty_bitmap_next_dirty_area(BdrvDirtyBitmap
> *bitmap,
> return hbitmap_next_dirty_area(bitmap->bitmap, offset, bytes);
> }
>
> +/**
> + * bdrv_merge_dirty_bitmap: merge src into dest.
> + * Ensures permissions on bitmaps are reasonable; use for public API.
> + *
> + * @backup: If provided, make a copy of dest here prior to merge.
> + */
> void bdrv_merge_dirty_bitmap(BdrvDirtyBitmap *dest, const BdrvDirtyBitmap
> *src,
> HBitmap **backup, Error **errp)
> {
> - bool ret;
> -
> qemu_mutex_lock(dest->mutex);
> if (src->mutex != dest->mutex) {
> qemu_mutex_lock(src->mutex);
> @@ -833,6 +837,37 @@ void bdrv_merge_dirty_bitmap(BdrvDirtyBitmap *dest,
> const BdrvDirtyBitmap *src,
> goto out;
> }
>
> + assert(bdrv_dirty_bitmap_merge_internal(dest, src, backup, false));
Please keep the explicit @ret. We never define NDEBUG, but doing things
with side effects inside of assert() is bad style nonetheless.
> +
> +out:
> + qemu_mutex_unlock(dest->mutex);
> + if (src->mutex != dest->mutex) {
> + qemu_mutex_unlock(src->mutex);
> + }
> +}
> +
> +/**
> + * bdrv_dirty_bitmap_merge_internal: merge src into dest.
> + * Does NOT check bitmap permissions; not suitable for use as public API.
> + *
> + * @backup: If provided, make a copy of dest here prior to merge.
> + * @lock: If true, lock and unlock bitmaps on the way in/out.
> + * returns true if the merge succeeded; false if unattempted.
> + */
> +bool bdrv_dirty_bitmap_merge_internal(BdrvDirtyBitmap *dest,
> + const BdrvDirtyBitmap *src,
> + HBitmap **backup,
> + bool lock)
> +{
> + bool ret;
> +
> + if (lock) {
> + qemu_mutex_lock(dest->mutex);
> + if (src->mutex != dest->mutex) {
> + qemu_mutex_lock(src->mutex);
> + }
> + }
> +
Why not check for INCONSISTENT and RO still?
Max
> if (backup) {
> *backup = dest->bitmap;
> dest->bitmap = hbitmap_alloc(dest->size,
> hbitmap_granularity(*backup));
signature.asc
Description: OpenPGP digital signature
- Re: [Qemu-devel] [PATCH v2 04/18] qapi: add BitmapSyncMode enum, (continued)
- [Qemu-devel] [PATCH v2 06/18] block/backup: add 'never' policy to bitmap sync mode, John Snow, 2019/07/03
- [Qemu-devel] [PATCH v2 05/18] block/backup: Add mirror sync mode 'bitmap', John Snow, 2019/07/03
- [Qemu-devel] [PATCH v2 07/18] hbitmap: Fix merge when b is empty, and result is not an alias of a, John Snow, 2019/07/03
- [Qemu-devel] [PATCH v2 08/18] hbitmap: enable merging across granularities, John Snow, 2019/07/03
- [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, John Snow, 2019/07/03
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal,
Max Reitz <=
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, John Snow, 2019/07/05
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, Max Reitz, 2019/07/08
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, John Snow, 2019/07/08
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, Max Reitz, 2019/07/08
- Re: [Qemu-devel] [PATCH v2 09/18] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal, John Snow, 2019/07/08
[Qemu-devel] [PATCH v2 12/18] block/backup: add 'always' bitmap sync policy, John Snow, 2019/07/03