From: Max Reitz <mreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>
Subject: [Qemu-devel] [PULL 52/85] block: release persistent bitmaps on inactivate
Date: Tue, 11 Jul 2017 18:07:41 +0200 [thread overview]
Message-ID: <20170711160814.20941-53-mreitz@redhat.com> (raw)
In-Reply-To: <20170711160814.20941-1-mreitz@redhat.com>
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
We should release them here to reload on invalidate cache.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-id: 20170628120530.31251-31-vsementsov@virtuozzo.com
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
include/block/dirty-bitmap.h | 1 +
block.c | 4 ++++
block/dirty-bitmap.c | 29 +++++++++++++++++++++++------
3 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
index 93d97f0..a79a58d 100644
--- a/include/block/dirty-bitmap.h
+++ b/include/block/dirty-bitmap.h
@@ -25,6 +25,7 @@ BdrvDirtyBitmap *bdrv_find_dirty_bitmap(BlockDriverState *bs,
void bdrv_dirty_bitmap_make_anon(BdrvDirtyBitmap *bitmap);
void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap);
void bdrv_release_named_dirty_bitmaps(BlockDriverState *bs);
+void bdrv_release_persistent_dirty_bitmaps(BlockDriverState *bs);
void bdrv_remove_persistent_dirty_bitmap(BlockDriverState *bs,
const char *name,
Error **errp);
diff --git a/block.c b/block.c
index 1d44165..913bb43 100644
--- a/block.c
+++ b/block.c
@@ -4082,6 +4082,10 @@ static int bdrv_inactivate_recurse(BlockDriverState *bs,
}
}
+ /* At this point persistent bitmaps should be already stored by the format
+ * driver */
+ bdrv_release_persistent_dirty_bitmaps(bs);
+
return 0;
}
diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
index b2ca78b..543bddb 100644
--- a/block/dirty-bitmap.c
+++ b/block/dirty-bitmap.c
@@ -356,15 +356,20 @@ void bdrv_dirty_bitmap_truncate(BlockDriverState *bs)
bdrv_dirty_bitmaps_unlock(bs);
}
+static bool bdrv_dirty_bitmap_has_name(BdrvDirtyBitmap *bitmap)
+{
+ return !!bdrv_dirty_bitmap_name(bitmap);
+}
+
/* Called with BQL taken. */
-static void bdrv_do_release_matching_dirty_bitmap(BlockDriverState *bs,
- BdrvDirtyBitmap *bitmap,
- bool only_named)
+static void bdrv_do_release_matching_dirty_bitmap(
+ BlockDriverState *bs, BdrvDirtyBitmap *bitmap,
+ bool (*cond)(BdrvDirtyBitmap *bitmap))
{
BdrvDirtyBitmap *bm, *next;
bdrv_dirty_bitmaps_lock(bs);
QLIST_FOREACH_SAFE(bm, &bs->dirty_bitmaps, list, next) {
- if ((!bitmap || bm == bitmap) && (!only_named || bm->name)) {
+ if ((!bitmap || bm == bitmap) && (!cond || cond(bm))) {
assert(!bm->active_iterators);
assert(!bdrv_dirty_bitmap_frozen(bm));
assert(!bm->meta);
@@ -389,7 +394,7 @@ out:
/* Called with BQL taken. */
void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
{
- bdrv_do_release_matching_dirty_bitmap(bs, bitmap, false);
+ bdrv_do_release_matching_dirty_bitmap(bs, bitmap, NULL);
}
/**
@@ -400,7 +405,19 @@ void bdrv_release_dirty_bitmap(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
*/
void bdrv_release_named_dirty_bitmaps(BlockDriverState *bs)
{
- bdrv_do_release_matching_dirty_bitmap(bs, NULL, true);
+ bdrv_do_release_matching_dirty_bitmap(bs, NULL, bdrv_dirty_bitmap_has_name);
+}
+
+/**
+ * Release all persistent dirty bitmaps attached to a BDS (for use in
+ * bdrv_inactivate_recurse()).
+ * There must not be any frozen bitmaps attached.
+ * This function does not remove persistent bitmaps from the storage.
+ */
+void bdrv_release_persistent_dirty_bitmaps(BlockDriverState *bs)
+{
+ bdrv_do_release_matching_dirty_bitmap(bs, NULL,
+ bdrv_dirty_bitmap_get_persistance);
}
/**
--
2.9.4
next prev parent reply other threads:[~2017-07-11 16:11 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-11 16:06 [Qemu-devel] [PULL 00/85] Block layer patches Max Reitz
2017-07-11 16:06 ` [Qemu-devel] [PULL 01/85] block: expose crypto option names / defs to other drivers Max Reitz
2017-07-11 16:06 ` [Qemu-devel] [PULL 02/85] block: add ability to set a prefix for opt names Max Reitz
2017-07-11 16:06 ` [Qemu-devel] [PULL 03/85] qcow: document another weakness of qcow AES encryption Max Reitz
2017-07-11 16:06 ` [Qemu-devel] [PULL 04/85] qcow: require image size to be > 1 for new images Max Reitz
2017-07-11 16:06 ` [Qemu-devel] [PULL 05/85] iotests: skip 042 with qcow which dosn't support zero sized images Max Reitz
2017-07-11 16:06 ` [Qemu-devel] [PULL 06/85] iotests: skip 048 with qcow which doesn't support resize Max Reitz
2017-07-11 16:06 ` [Qemu-devel] [PULL 07/85] block: deprecate "encryption=on" in favor of "encrypt.format=aes" Max Reitz
2017-07-11 16:06 ` [Qemu-devel] [PULL 08/85] qcow: make encrypt_sectors encrypt in place Max Reitz
2017-07-11 16:06 ` [Qemu-devel] [PULL 09/85] qcow: convert QCow to use QCryptoBlock for encryption Max Reitz
2017-07-11 16:06 ` [Qemu-devel] [PULL 10/85] qcow2: make qcow2_encrypt_sectors encrypt in place Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 11/85] qcow2: convert QCow2 to use QCryptoBlock for encryption Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 12/85] qcow2: extend specification to cover LUKS encryption Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 13/85] qcow2: add support for LUKS encryption format Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 14/85] qcow2: add iotests to cover LUKS encryption support Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 15/85] iotests: enable tests 134 and 158 to work with qcow (v1) Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 16/85] block: rip out all traces of password prompting Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 17/85] block: remove all encryption handling APIs Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 18/85] block: pass option prefix down to crypto layer Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 19/85] qcow2: report encryption specific image information Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 20/85] docs: document encryption options for qcow, qcow2 and luks Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 21/85] iotests: 181 does not work for all formats Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 22/85] mirror: Fix inconsistent backing AioContext for after mirroring Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 23/85] specs/qcow2: fix bitmap granularity qemu-specific note Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 24/85] specs/qcow2: do not use wording 'bitmap header' Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 25/85] hbitmap: improve dirty iter Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 26/85] tests: add hbitmap iter test Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 27/85] block: fix bdrv_dirty_bitmap_granularity signature Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 28/85] block/dirty-bitmap: add deserialize_ones func Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 29/85] qcow2-refcount: rename inc_refcounts() and make it public Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 30/85] qcow2: add bitmaps extension Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 31/85] block/dirty-bitmap: fix comment for BlockDirtyBitmap.disabled field Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 32/85] block/dirty-bitmap: add readonly field to BdrvDirtyBitmap Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 33/85] qcow2: autoloading dirty bitmaps Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 34/85] block: refactor bdrv_reopen_commit Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 35/85] block: new bdrv_reopen_bitmaps_rw interface Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 36/85] qcow2: support .bdrv_reopen_bitmaps_rw Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 37/85] block/dirty-bitmap: add autoload field to BdrvDirtyBitmap Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 38/85] block: bdrv_close: release bitmaps after drv->bdrv_close Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 39/85] block: introduce persistent dirty bitmaps Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 40/85] block/dirty-bitmap: add bdrv_dirty_bitmap_next() Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 41/85] qcow2: add persistent dirty bitmaps support Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 42/85] qcow2: store bitmaps on reopening image as read-only Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 43/85] block: add bdrv_can_store_new_dirty_bitmap Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 44/85] qcow2: add .bdrv_can_store_new_dirty_bitmap Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 45/85] qmp: add persistent flag to block-dirty-bitmap-add Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 46/85] qmp: add autoload parameter " Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 47/85] qmp: add x-debug-block-dirty-bitmap-sha256 Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 48/85] iotests: test qcow2 persistent dirty bitmap Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 49/85] block/dirty-bitmap: add bdrv_remove_persistent_dirty_bitmap Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 50/85] qcow2: add .bdrv_remove_persistent_dirty_bitmap Max Reitz
2017-07-14 10:42 ` Peter Maydell
2017-07-14 12:04 ` Vladimir Sementsov-Ogievskiy
2017-07-14 12:08 ` Peter Maydell
2017-07-14 12:11 ` Eric Blake
2017-07-11 16:07 ` [Qemu-devel] [PULL 51/85] qmp: block-dirty-bitmap-remove: remove persistent Max Reitz
2017-07-11 16:07 ` Max Reitz [this message]
2017-07-11 16:07 ` [Qemu-devel] [PULL 53/85] iotests: skip 159 & 170 with luks format Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 54/85] iotests: fix remainining tests to work with LUKS Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 55/85] iotests: reduce PBKDF iterations when testing LUKS Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 56/85] iotests: add more LUKS hash combination tests Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 57/85] iotests: chown LUKS device before qemu-io launches Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 58/85] iotests: Use absolute paths for executables Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 59/85] iotests: Add test for colon handling Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 60/85] tests: Avoid non-portable 'echo -ARG' Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 61/85] block: add bdrv_measure() API Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 62/85] raw-format: add bdrv_measure() support Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 63/85] qcow2: extract preallocation calculation function Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 64/85] qcow2: make refcount size calculation conservative Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 65/85] qcow2: extract image creation option parsing Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 66/85] qcow2: add bdrv_measure() support Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 67/85] qemu-img: add measure subcommand Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 68/85] qemu-iotests: support per-format golden output files Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 69/85] iotests: add test 178 for qemu-img measure Max Reitz
2017-07-11 16:07 ` [Qemu-devel] [PULL 70/85] block: Add PreallocMode to BD.bdrv_truncate() Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 71/85] block: Add PreallocMode to bdrv_truncate() Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 72/85] block: Add PreallocMode to blk_truncate() Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 73/85] qemu-img: Expose PreallocMode for resizing Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 74/85] block/file-posix: Small fixes in raw_create() Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 75/85] block/file-posix: Extract raw_regular_truncate() Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 76/85] block/file-posix: Generalize raw_regular_truncate Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 77/85] block/file-posix: Preallocation for truncate Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 78/85] block/qcow2: Generalize preallocate() Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 79/85] block/qcow2: Lock s->lock in preallocate() Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 80/85] block/qcow2: Metadata preallocation for truncate Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 81/85] block/qcow2: Add qcow2_refcount_area() Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 82/85] block/qcow2: Rename "fail_block" to just "fail" Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 83/85] block/qcow2: falloc/full preallocating growth Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 84/85] iotests: Add preallocated resize test for raw Max Reitz
2017-07-11 16:08 ` [Qemu-devel] [PULL 85/85] iotests: Add preallocated growth test for qcow2 Max Reitz
2017-07-13 13:53 ` [Qemu-devel] [PULL 00/85] Block layer patches Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170711160814.20941-53-mreitz@redhat.com \
--to=mreitz@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).