From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: qemu-devel@nongnu.org, qemu-block@nongnu.org
Cc: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com,
armbru@redhat.com, mreitz@redhat.com,
nshirokovskiy@virtuozzo.com, den@openvz.org, jsnow@redhat.com
Subject: [Qemu-devel] [PATCH 2/4] block/dirty-bitmap: add hide/unhide API
Date: Mon, 3 Jun 2019 15:00:03 +0300 [thread overview]
Message-ID: <20190603120005.37394-3-vsementsov@virtuozzo.com> (raw)
In-Reply-To: <20190603120005.37394-1-vsementsov@virtuozzo.com>
Add functionality to make bitmap temporary anonymous. It will be used
to implement bitmap remove transaction action. We need hide bitmap
persistence too, as there are should not be unnamed persistent bitmaps.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
include/block/dirty-bitmap.h | 2 ++
block/dirty-bitmap.c | 26 ++++++++++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h
index 8044ace63e..542e437123 100644
--- a/include/block/dirty-bitmap.h
+++ b/include/block/dirty-bitmap.h
@@ -116,5 +116,7 @@ bool bdrv_dirty_bitmap_next_dirty_area(BdrvDirtyBitmap *bitmap,
BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap_locked(BlockDriverState *bs,
BdrvDirtyBitmap *bitmap,
Error **errp);
+void bdrv_dirty_bitmap_hide(BdrvDirtyBitmap *bitmap);
+void bdrv_dirty_bitmap_unhide(BdrvDirtyBitmap *bitmap);
#endif
diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c
index 49646a30e6..592964635e 100644
--- a/block/dirty-bitmap.c
+++ b/block/dirty-bitmap.c
@@ -35,6 +35,10 @@ struct BdrvDirtyBitmap {
bool busy; /* Bitmap is busy, it can't be used via QMP */
BdrvDirtyBitmap *successor; /* Anonymous child, if any. */
char *name; /* Optional non-empty unique ID */
+ char *hidden_name; /* Backup of @name for removal transaction
+ action. Used for hide/unhide API. */
+ bool hidden_persistent; /* Backup of @persistent for removal transaction
+ action. */
int64_t size; /* Size of the bitmap, in bytes */
bool disabled; /* Bitmap is disabled. It ignores all writes to
the device */
@@ -849,3 +853,25 @@ out:
qemu_mutex_unlock(src->mutex);
}
}
+
+void bdrv_dirty_bitmap_hide(BdrvDirtyBitmap *bitmap)
+{
+ qemu_mutex_lock(bitmap->mutex);
+ assert(!bitmap->hidden_name);
+ bitmap->hidden_name = bitmap->name;
+ bitmap->hidden_persistent = bitmap->persistent;
+ bitmap->name = NULL;
+ bitmap->persistent = false;
+ qemu_mutex_unlock(bitmap->mutex);
+}
+
+void bdrv_dirty_bitmap_unhide(BdrvDirtyBitmap *bitmap)
+{
+ qemu_mutex_lock(bitmap->mutex);
+ assert(!bitmap->name);
+ bitmap->name = bitmap->hidden_name;
+ bitmap->persistent = bitmap->hidden_persistent;
+ bitmap->hidden_name = NULL;
+ bitmap->hidden_persistent = false;
+ qemu_mutex_unlock(bitmap->mutex);
+}
--
2.18.0
next prev parent reply other threads:[~2019-06-03 12:17 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-03 12:00 [Qemu-devel] [PATCH 0/4] qapi: block-dirty-bitmap-remove transaction action Vladimir Sementsov-Ogievskiy
2019-06-03 12:00 ` [Qemu-devel] [PATCH 1/4] blockdev: reduce aio_context locked sections in bitmap add/remove Vladimir Sementsov-Ogievskiy
2019-06-07 22:28 ` John Snow
2019-06-03 12:00 ` Vladimir Sementsov-Ogievskiy [this message]
2019-06-07 22:39 ` [Qemu-devel] [PATCH 2/4] block/dirty-bitmap: add hide/unhide API John Snow
2019-06-10 9:33 ` Vladimir Sementsov-Ogievskiy
2019-06-10 9:42 ` Vladimir Sementsov-Ogievskiy
2019-06-10 9:44 ` Vladimir Sementsov-Ogievskiy
2019-06-10 9:46 ` Vladimir Sementsov-Ogievskiy
2019-06-03 12:00 ` [Qemu-devel] [PATCH 3/4] qapi: implement block-dirty-bitmap-remove transaction action Vladimir Sementsov-Ogievskiy
2019-06-07 22:57 ` John Snow
2019-06-10 9:39 ` Vladimir Sementsov-Ogievskiy
2019-06-03 12:00 ` [Qemu-devel] [PATCH 4/4] iotests: test bitmap moving inside 254 Vladimir Sementsov-Ogievskiy
2019-06-07 22:26 ` [Qemu-devel] [PATCH 0/4] qapi: block-dirty-bitmap-remove transaction action John Snow
2019-06-17 11:37 ` Vladimir Sementsov-Ogievskiy
2019-06-17 16:03 ` Kevin Wolf
2019-06-18 7:31 ` Vladimir Sementsov-Ogievskiy
2019-06-18 7:37 ` Kevin Wolf
2019-06-28 0:25 ` John Snow
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=20190603120005.37394-3-vsementsov@virtuozzo.com \
--to=vsementsov@virtuozzo.com \
--cc=armbru@redhat.com \
--cc=den@openvz.org \
--cc=fam@euphon.net \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=nshirokovskiy@virtuozzo.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).