yeahuh / rpms / qemu-kvm

Forked from rpms/qemu-kvm 2 years ago
Clone
0a122b
From c7c21ebc0dcddd666c616e161b0f9bbb4ade9cf4 Mon Sep 17 00:00:00 2001
0a122b
From: Jeffrey Cody <jcody@redhat.com>
0a122b
Date: Tue, 11 Feb 2014 16:14:27 +0100
0a122b
Subject: [PATCH 21/28] block: update block commit documentation regarding image truncation
0a122b
0a122b
RH-Author: Jeffrey Cody <jcody@redhat.com>
0a122b
Message-id: <d4d68c21d4b8936f3bcdc442abe0425e01352167.1392134912.git.jcody@redhat.com>
0a122b
Patchwork-id: 57217
0a122b
O-Subject: [RHEL7 qemu-kvm PATCH 3/6] block: update block commit documentation regarding image truncation
0a122b
Bugzilla: 1047254
0a122b
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
0a122b
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
0a122b
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
0a122b
0a122b
This updates the documentation for commiting snapshot images.
0a122b
Specifically, this highlights what happens when the base image
0a122b
is either smaller or larger than the snapshot image being committed.
0a122b
0a122b
In the case of the base image being smaller, it is resized to the
0a122b
larger size of the snapshot image.  In the case of the base image
0a122b
being larger, it is not resized automatically, but once the commit
0a122b
has completed it is safe for the user to truncate the base image.
0a122b
0a122b
Signed-off-by: Jeff Cody <jcody@redhat.com>
0a122b
Reviewed-by: Fam Zheng <famz@redhat.com>
0a122b
Reviewed-by: Eric Blake <eblake@redhat.com>
0a122b
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
0a122b
(cherry picked from commit 37222900743962e146a82b7077a18c3f39859a19)
0a122b
0a122b
Conflicts:
0a122b
	qmp-commands.hx
0a122b
0a122b
RHEL7 Notes: Conflict is due to 2 things: 1) drive-backup
0a122b
             not present in RHEL7, and 2) the block job
0a122b
             differentiation #ifdefs.
0a122b
---
0a122b
 hmp-commands.hx  |  5 +++++
0a122b
 qapi-schema.json |  7 +++++++
0a122b
 qemu-img.texi    |  7 ++++++-
0a122b
 qmp-commands.hx  | 40 ++++++++++++++++++++++++++++++++++++++++
0a122b
 4 files changed, 58 insertions(+), 1 deletion(-)
0a122b
0a122b
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
0a122b
---
0a122b
 hmp-commands.hx  |    5 +++++
0a122b
 qapi-schema.json |    7 +++++++
0a122b
 qemu-img.texi    |    7 ++++++-
0a122b
 qmp-commands.hx  |   40 ++++++++++++++++++++++++++++++++++++++++
0a122b
 4 files changed, 58 insertions(+), 1 deletions(-)
0a122b
0a122b
diff --git a/hmp-commands.hx b/hmp-commands.hx
0a122b
index 8e08ebf..467dd70 100644
0a122b
--- a/hmp-commands.hx
0a122b
+++ b/hmp-commands.hx
0a122b
@@ -35,6 +35,11 @@ STEXI
0a122b
 @item commit
0a122b
 @findex commit
0a122b
 Commit changes to the disk images (if -snapshot is used) or backing files.
0a122b
+If the backing file is smaller than the snapshot, then the backing file will be
0a122b
+resized to be the same size as the snapshot.  If the snapshot is smaller than
0a122b
+the backing file, the backing file will not be truncated.  If you want the
0a122b
+backing file to match the size of the smaller snapshot, you can safely truncate
0a122b
+it yourself once the commit operation successfully completes.
0a122b
 ETEXI
0a122b
 
0a122b
     {
0a122b
diff --git a/qapi-schema.json b/qapi-schema.json
0a122b
index 8b257e2..017b3b7 100644
0a122b
--- a/qapi-schema.json
0a122b
+++ b/qapi-schema.json
0a122b
@@ -1846,6 +1846,13 @@
0a122b
 #                    user needs to complete the job with the block-job-complete
0a122b
 #                    command after getting the ready event. (Since 2.0)
0a122b
 #
0a122b
+#                    If the base image is smaller than top, then the base image
0a122b
+#                    will be resized to be the same size as top.  If top is
0a122b
+#                    smaller than the base image, the base will not be
0a122b
+#                    truncated.  If you want the base image size to match the
0a122b
+#                    size of the smaller top, you can safely truncate it
0a122b
+#                    yourself once the commit operation successfully completes.
0a122b
+#
0a122b
 #
0a122b
 # @speed:  #optional the maximum speed, in bytes per second
0a122b
 #
0a122b
diff --git a/qemu-img.texi b/qemu-img.texi
0a122b
index 1078791..d75a780 100644
0a122b
--- a/qemu-img.texi
0a122b
+++ b/qemu-img.texi
0a122b
@@ -136,7 +136,12 @@ it doesn't need to be specified separately in this case.
0a122b
 
0a122b
 @item commit [-f @var{fmt}] [-t @var{cache}] @var{filename}
0a122b
 
0a122b
-Commit the changes recorded in @var{filename} in its base image.
0a122b
+Commit the changes recorded in @var{filename} in its base image or backing file.
0a122b
+If the backing file is smaller than the snapshot, then the backing file will be
0a122b
+resized to be the same size as the snapshot.  If the snapshot is smaller than
0a122b
+the backing file, the backing file will not be truncated.  If you want the
0a122b
+backing file to match the size of the smaller snapshot, you can safely truncate
0a122b
+it yourself once the commit operation successfully completes.
0a122b
 
0a122b
 @item compare [-f @var{fmt}] [-F @var{fmt}] [-p] [-s] [-q] @var{filename1} @var{filename2}
0a122b
 
0a122b
diff --git a/qmp-commands.hx b/qmp-commands.hx
0a122b
index 7a1bfd4..08a01ee 100644
0a122b
--- a/qmp-commands.hx
0a122b
+++ b/qmp-commands.hx
0a122b
@@ -1008,6 +1008,46 @@ EQMP
0a122b
         .args_type  = "device:B,base:s?,top:s,speed:o?",
0a122b
         .mhandler.cmd_new = qmp_marshal_input_block_commit,
0a122b
     },
0a122b
+
0a122b
+SQMP
0a122b
+block-commit
0a122b
+------------
0a122b
+
0a122b
+Live commit of data from overlay image nodes into backing nodes - i.e., writes
0a122b
+data between 'top' and 'base' into 'base'.
0a122b
+
0a122b
+Arguments:
0a122b
+
0a122b
+- "device": The device's ID, must be unique (json-string)
0a122b
+- "base": The file name of the backing image to write data into.
0a122b
+          If not specified, this is the deepest backing image
0a122b
+          (json-string, optional)
0a122b
+- "top":  The file name of the backing image within the image chain,
0a122b
+          which contains the topmost data to be committed down.
0a122b
+
0a122b
+          If top == base, that is an error.
0a122b
+          If top == active, the job will not be completed by itself,
0a122b
+          user needs to complete the job with the block-job-complete
0a122b
+          command after getting the ready event. (Since 2.0)
0a122b
+
0a122b
+          If the base image is smaller than top, then the base image
0a122b
+          will be resized to be the same size as top.  If top is
0a122b
+          smaller than the base image, the base will not be
0a122b
+          truncated.  If you want the base image size to match the
0a122b
+          size of the smaller top, you can safely truncate it
0a122b
+          yourself once the commit operation successfully completes.
0a122b
+          (json-string)
0a122b
+- "speed":  the maximum speed, in bytes per second (json-int, optional)
0a122b
+
0a122b
+
0a122b
+Example:
0a122b
+
0a122b
+-> { "execute": "block-commit", "arguments": { "device": "virtio0",
0a122b
+                                              "top": "/tmp/snap1.qcow2" } }
0a122b
+<- { "return": {} }
0a122b
+
0a122b
+EQMP
0a122b
+
0a122b
 #endif
0a122b
 
0a122b
     {
0a122b
-- 
0a122b
1.7.1
0a122b