[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 12/12] qemu-img: add bitmap clear
From: |
John Snow |
Subject: |
[Qemu-devel] [RFC PATCH 12/12] qemu-img: add bitmap clear |
Date: |
Fri, 11 May 2018 21:25:37 -0400 |
Signed-off-by: John Snow <address@hidden>
---
qemu-img-cmds.hx | 4 ++--
qemu-img.c | 46 ++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 46 insertions(+), 4 deletions(-)
diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
index d25f359f5a..7b6ec73488 100644
--- a/qemu-img-cmds.hx
+++ b/qemu-img-cmds.hx
@@ -23,9 +23,9 @@ STEXI
ETEXI
DEF("bitmap", img_bitmap,
- "bitmap dump [--object objectdef] [--image-opts] [-f fmt] [--output=ofmt]
[-U] filename [bitmap]")
+ "bitmap <dump|clear> [--object objectdef] [--image-opts] [-f fmt]
[--output=ofmt] [-U] filename [bitmap]")
STEXI
address@hidden bitmap dump [--object @var{objectdef}] [--image-opts] [-f
@var{fmt}] address@hidden [-U] @var{filename} address@hidden
address@hidden bitmap <dump|clear> [--object @var{objectdef}] [--image-opts]
[-f @var{fmt}] address@hidden [-U] @var{filename} address@hidden
ETEXI
DEF("check", img_check,
diff --git a/qemu-img.c b/qemu-img.c
index 1141216617..b5ab8a3837 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -2967,7 +2967,22 @@ static void dump_bitmap_mapping(BitmapMapping *bm,
OutputFormat output_format,
}
}
-/* img_bitmap subcommands: dump */
+static int do_bitmap_clear(BlockDriverState *bs, BdrvDirtyBitmap *bitmap)
+{
+ bool enabled = bdrv_dirty_bitmap_enabled(bitmap);
+
+ if (!enabled) {
+ bdrv_enable_dirty_bitmap(bitmap);
+ }
+ bdrv_clear_dirty_bitmap(bitmap, NULL);
+ if (!enabled) {
+ bdrv_disable_dirty_bitmap(bitmap);
+ }
+
+ return 0;
+}
+
+/* img_bitmap subcommands: dump, clear */
typedef struct BitmapOpts {
CommonOpts base;
@@ -3017,6 +3032,30 @@ static int bitmap_cmd_dump(BlockDriverState *bs,
BitmapOpts *opts)
return 0;
}
+static int bitmap_cmd_clear(BlockDriverState *bs, BitmapOpts *opts)
+{
+ BdrvDirtyBitmap *bitmap = NULL;
+
+ if (opts->name) {
+ bitmap = bdrv_find_dirty_bitmap(bs, opts->name);
+ if (!bitmap) {
+ error_report("No bitmap named '%s' found", opts->name);
+ return -1;
+ }
+ if (do_bitmap_clear(bs, bitmap)) {
+ return -1;
+ }
+ } else {
+ while ((bitmap = bdrv_dirty_bitmap_next(bs, bitmap))) {
+ if (do_bitmap_clear(bs, bitmap)) {
+ return -1;
+ }
+ }
+ }
+
+ return 0;
+}
+
static int img_bitmap(int argc, char **argv)
{
const char *cmd;
@@ -3029,12 +3068,15 @@ static int img_bitmap(int argc, char **argv)
int (* handler)(BlockDriverState *b, BitmapOpts *opts);
if (argc < 2) {
- error_report("Expected a bitmap subcommand: <dump>");
+ error_report("Expected a bitmap subcommand: <dump | clear>");
return EXIT_FAILURE;
}
cmd = argv[1];
if (strcmp(cmd, "dump") == 0) {
handler = bitmap_cmd_dump;
+ } else if (strcmp(cmd, "clear") == 0) {
+ flags |= BDRV_O_RDWR;
+ handler = bitmap_cmd_clear;
} else {
error_report("Unrecognized bitmap subcommand '%s'", cmd);
return EXIT_FAILURE;
--
2.14.3
- [Qemu-devel] [RFC PATCH 00/12] qemu-img: add bitmap queries, John Snow, 2018/05/11
- [Qemu-devel] [RFC PATCH 02/12] qcow2/dirty-bitmap: cache loaded bitmaps, John Snow, 2018/05/11
- [Qemu-devel] [RFC PATCH 05/12] qcow2-bitmap: track bitmap type, John Snow, 2018/05/11
- [Qemu-devel] [RFC PATCH 09/12] qapi/block-core: add BitmapMapping and BitmapEntry structs, John Snow, 2018/05/11
- [Qemu-devel] [RFC PATCH 12/12] qemu-img: add bitmap clear,
John Snow <=
- [Qemu-devel] [RFC PATCH 04/12] qcow2/dirty-bitmaps: load IN_USE bitmaps if disk is RO, John Snow, 2018/05/11
- [Qemu-devel] [RFC PATCH 03/12] block/qcow2-bitmap: avoid adjusting bm->flags for RO bitmaps, John Snow, 2018/05/11
- [Qemu-devel] [RFC PATCH 08/12] qjson: allow caller to ask for arbitrary indent, John Snow, 2018/05/11
- [Qemu-devel] [RFC PATCH 06/12] qapi: add bitmap info, John Snow, 2018/05/11