[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 24/24] qemu-img: add inplace conversion to qemu-img
From: |
Devin Nakamura |
Subject: |
[Qemu-devel] [RFC 24/24] qemu-img: add inplace conversion to qemu-img |
Date: |
Fri, 29 Jul 2011 00:49:54 -0400 |
Signed-off-by: Devin Nakamura <address@hidden>
---
Makefile | 2 +
qemu-img-cmds.hx | 6 +++++
qemu-img.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
index daa3aa0..243c818 100644
--- a/Makefile
+++ b/Makefile
@@ -148,6 +148,8 @@ qemu-nbd$(EXESUF): qemu-nbd.o qemu-tool.o qemu-error.o
$(oslib-obj-y) $(trace-ob
qemu-io$(EXESUF): qemu-io.o cmd.o qemu-tool.o qemu-error.o $(oslib-obj-y)
$(trace-obj-y) $(block-obj-y) $(qobject-obj-y) $(version-obj-y)
qemu-timer-common.o
+qemu-convert$(EXESUF): qemu-convert.o cmd.o qemu-tool.o qemu-error.o
$(oslib-obj-y) $(trace-obj-y) $(block-obj-y) $(qobject-obj-y) $(version-obj-y)
qemu-timer-common.o
+
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx
$(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > $@," GEN
$@")
diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx
index 1299e83..ea97f83 100644
--- a/qemu-img-cmds.hx
+++ b/qemu-img-cmds.hx
@@ -33,6 +33,12 @@ STEXI
@item convert [-c] [-p] [-f @var{fmt}] [-O @var{output_fmt}] [-o
@var{options}] [-s @var{snapshot_name}] @var{filename} address@hidden [...]]
@var{output_filename}
ETEXI
+DEF("convert-inplace", img_convert_inplace,
+ "convert-inplace filename target_format")
+STEXI
address@hidden convert-inplace @var{filename} @var{target_format}
+ETEXI
+
DEF("info", img_info,
"info [-f fmt] filename")
STEXI
diff --git a/qemu-img.c b/qemu-img.c
index b205e98..c22066e 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -1024,6 +1024,70 @@ out:
return 0;
}
+static int img_convert_inplace(int argc, char **argv)
+{
+ int ret;
+ BlockDriverState *bs_src, *bs_tgt;
+ QEMUOptionParameter *options = NULL;
+ BlockConversionOptions drv_options;
+ uint64_t guest_offset, host_offset, count;
+ guest_offset = host_offset = count = 0;
+ bs_src = bdrv_new("");
+ ret = bdrv_open(bs_src, argv[1], BDRV_O_RDWR, NULL);
+ if (ret) {
+ printf("Failed to open source image: %s\n", argv[1]);
+ return ret;
+ }
+
+ ret = bdrv_get_conversion_options(bs_src, &drv_options);
+ if (ret) {
+ printf("Failed getting conversion options\n");
+ goto end_before_tgt;
+ }
+
+ ret = bdrv_open_conversion_target(&bs_tgt, bs_src->file, &drv_options,
options, argv[2]);
+ if (ret) {
+ printf("Failed to open conversion target, format: %s\n", argv[2]);
+ switch(ret) {
+ case -ENOENT:
+ printf("No block driver found\n"); break;
+ case -ENOTSUP:
+ printf("Not supported by block driver\n"); break;
+ default:
+ printf("Unknown error (%i)\n", ret);
+ }
+ goto end_before_tgt;
+ }
+
+ do {
+ ret = bdrv_get_mapping(bs_src, &guest_offset, &host_offset, &count);
+ if (!ret) {
+ ret = bdrv_map(bs_tgt, guest_offset, host_offset, count);
+ }
+ } while (count != 0);
+
+ if (ret) {
+ printf("An error occured during mapping process\n");
+ goto end;
+ }
+ ret = bdrv_copy_header(bs_tgt);
+ if (ret) {
+ printf("An error occured during header copy\n");
+ goto end;
+ }
+
+ ret = 0;
+
+end:
+ bdrv_close(bs_tgt);
+end_before_tgt:
+ bdrv_close(bs_src);
+ return ret;
+
+
+
+}
+
static void dump_snapshots(BlockDriverState *bs)
{
--
1.7.6.rc1
- [Qemu-devel] [RFC 13/24] qed: add bdrv_qed_get_conversion_options(), (continued)
- [Qemu-devel] [RFC 13/24] qed: add bdrv_qed_get_conversion_options(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 12/24] qed: add bdrv_qed_copy_header(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 15/24] qcow2: split up the creation of new refcount table from the act of checking it, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 14/24] qcow2: fix typo in documentation for qcow2_get_cluster_offset(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 16/24] qcow2: add qcow2_drop_leaked_clusters(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 17/24] qcow2: add qcow2_get_mapping, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 18/24] qcow2: add qcow2_map, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 19/24] qcow2: add qcow2_copy_header(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 21/24] qcow2: add qcow2_open_conversion_target(), Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 23/24] qemu-io: add setmap command, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 24/24] qemu-img: add inplace conversion to qemu-img,
Devin Nakamura <=
- [Qemu-devel] [RFC 22/24] qemu-io: make map command use new block mapping function, Devin Nakamura, 2011/07/29
- [Qemu-devel] [RFC 20/24] qcow2: add get_conversion_options(), Devin Nakamura, 2011/07/29