From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org,
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
qemu-block@nongnu.org, qemu-stable@nongnu.org,
Max Reitz <mreitz@redhat.com>,
jsnow@redhat.com
Subject: [Qemu-devel] [PULL 19/36] blockdev: reduce aio_context locked sections in bitmap add/remove
Date: Fri, 16 Aug 2019 19:13:01 -0400 [thread overview]
Message-ID: <20190816231318.8650-20-jsnow@redhat.com> (raw)
In-Reply-To: <20190816231318.8650-1-jsnow@redhat.com>
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Commit 0a6c86d024c52 returned these locks back to add/remove
functionality, to protect from intersection of persistent bitmap
related IO with other IO. But other bitmap-related functions called
here are unrelated to the problem, and there are no needs to keep these
calls inside critical sections.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190708220502.12977-2-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
---
blockdev.c | 30 +++++++++++++-----------------
1 file changed, 13 insertions(+), 17 deletions(-)
diff --git a/blockdev.c b/blockdev.c
index a44ab1f709e..bcd766a1a24 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -2813,7 +2813,6 @@ void qmp_block_dirty_bitmap_add(const char *node, const char *name,
{
BlockDriverState *bs;
BdrvDirtyBitmap *bitmap;
- AioContext *aio_context = NULL;
if (!name || name[0] == '\0') {
error_setg(errp, "Bitmap name cannot be empty");
@@ -2849,16 +2848,20 @@ void qmp_block_dirty_bitmap_add(const char *node, const char *name,
}
if (persistent) {
- aio_context = bdrv_get_aio_context(bs);
+ AioContext *aio_context = bdrv_get_aio_context(bs);
+ bool ok;
+
aio_context_acquire(aio_context);
- if (!bdrv_can_store_new_dirty_bitmap(bs, name, granularity, errp)) {
- goto out;
+ ok = bdrv_can_store_new_dirty_bitmap(bs, name, granularity, errp);
+ aio_context_release(aio_context);
+ if (!ok) {
+ return;
}
}
bitmap = bdrv_create_dirty_bitmap(bs, granularity, name, errp);
if (bitmap == NULL) {
- goto out;
+ return;
}
if (disabled) {
@@ -2866,10 +2869,6 @@ void qmp_block_dirty_bitmap_add(const char *node, const char *name,
}
bdrv_dirty_bitmap_set_persistence(bitmap, persistent);
- out:
- if (aio_context) {
- aio_context_release(aio_context);
- }
}
void qmp_block_dirty_bitmap_remove(const char *node, const char *name,
@@ -2877,8 +2876,6 @@ void qmp_block_dirty_bitmap_remove(const char *node, const char *name,
{
BlockDriverState *bs;
BdrvDirtyBitmap *bitmap;
- Error *local_err = NULL;
- AioContext *aio_context = NULL;
bitmap = block_dirty_bitmap_lookup(node, name, &bs, errp);
if (!bitmap || !bs) {
@@ -2891,20 +2888,19 @@ void qmp_block_dirty_bitmap_remove(const char *node, const char *name,
}
if (bdrv_dirty_bitmap_get_persistence(bitmap)) {
- aio_context = bdrv_get_aio_context(bs);
+ AioContext *aio_context = bdrv_get_aio_context(bs);
+ Error *local_err = NULL;
+
aio_context_acquire(aio_context);
bdrv_remove_persistent_dirty_bitmap(bs, name, &local_err);
+ aio_context_release(aio_context);
if (local_err != NULL) {
error_propagate(errp, local_err);
- goto out;
+ return;
}
}
bdrv_release_dirty_bitmap(bs, bitmap);
- out:
- if (aio_context) {
- aio_context_release(aio_context);
- }
}
/**
--
2.21.0
next prev parent reply other threads:[~2019-08-16 23:33 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-16 23:12 [Qemu-devel] [PULL 00/36] Bitmaps patches John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 01/36] qapi/block-core: Introduce BackupCommon John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 02/36] drive-backup: create do_backup_common John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 03/36] blockdev-backup: utilize do_backup_common John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 04/36] qapi: add BitmapSyncMode enum John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 05/36] block/backup: Add mirror sync mode 'bitmap' John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 06/36] block/backup: add 'never' policy to bitmap sync mode John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 07/36] hbitmap: Fix merge when b is empty, and result is not an alias of a John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 08/36] hbitmap: enable merging across granularities John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 09/36] block/dirty-bitmap: add bdrv_dirty_bitmap_merge_internal John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 10/36] block/dirty-bitmap: add bdrv_dirty_bitmap_get John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 11/36] block/backup: upgrade copy_bitmap to BdrvDirtyBitmap John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 12/36] block/backup: add 'always' bitmap sync policy John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 13/36] iotests: add testing shim for script-style python tests John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 14/36] iotests: teach run_job to cancel pending jobs John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 15/36] iotests: teach FilePath to produce multiple paths John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 16/36] iotests: Add virtio-scsi device helper John Snow
2019-08-16 23:12 ` [Qemu-devel] [PULL 17/36] iotests: add test 257 for bitmap-mode backups John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 18/36] block/backup: loosen restriction on readonly bitmaps John Snow
2019-08-16 23:13 ` John Snow [this message]
2019-08-16 23:13 ` [Qemu-devel] [PULL 20/36] qapi: implement block-dirty-bitmap-remove transaction action John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 21/36] iotests: test bitmap moving inside 254 John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 22/36] iotests/257: add Pattern class John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 23/36] iotests/257: add EmulatedBitmap class John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 24/36] iotests/257: Refactor backup helpers John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 25/36] block/backup: hoist bitmap check into QMP interface John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 26/36] iotests/257: test API failures John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 27/36] block/backup: improve sync=bitmap work estimates John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 28/36] block/backup: centralize copy_bitmap initialization John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 29/36] block/backup: add backup_is_cluster_allocated John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 30/36] block/backup: teach TOP to never copy unallocated regions John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 31/36] block/backup: support bitmap sync modes for non-bitmap backups John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 32/36] iotests/257: test traditional sync modes John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 33/36] qapi: add dirty-bitmaps to query-named-block-nodes result John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 34/36] block/backup: deal with zero detection John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 35/36] block/backup: refactor write_flags John Snow
2019-08-16 23:13 ` [Qemu-devel] [PULL 36/36] tests/test-hbitmap: test next_zero and _next_dirty_area after truncate John Snow
2019-08-19 11:32 ` [Qemu-devel] [PULL 00/36] Bitmaps 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=20190816231318.8650-20-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=mreitz@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-stable@nongnu.org \
--cc=vsementsov@virtuozzo.com \
/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).