]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
lib: Introduce flag VIR_DOMAIN_BLOCK_COMMIT_RELATIVE
authorPeter Krempa <pkrempa@redhat.com>
Tue, 13 May 2014 15:59:32 +0000 (17:59 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 8 Jul 2014 09:45:04 +0000 (11:45 +0200)
Introduce flag for the block commit API to allow the commit operation to
leave the chain relatively addressed. Also adds a virsh switch to enable
this behavior.

include/libvirt/libvirt.h.in
src/libvirt.c
tools/virsh-domain.c
tools/virsh.pod

index aedd49ad57fa9fba4c963b3c2dbe7dfba73c5475..8c4ee8b89030607dce7f6d79b2b1c59786683c23 100644 (file)
@@ -2606,6 +2606,9 @@ typedef enum {
                                                  have been committed */
     VIR_DOMAIN_BLOCK_COMMIT_ACTIVE  = 1 << 2, /* Allow a two-phase commit when
                                                  top is the active layer */
+    VIR_DOMAIN_BLOCK_COMMIT_RELATIVE = 1 << 3, /* keep the backing chain
+                                                  referenced using relative
+                                                  names */
 } virDomainBlockCommitFlags;
 
 int virDomainBlockCommit(virDomainPtr dom, const char *disk, const char *base,
index b80b484cf161a0d218b30b1f32ca8a13603126c9..f178727f014a04c89cd635cca579ea34746ef7a9 100644 (file)
@@ -19884,6 +19884,11 @@ virDomainBlockRebase(virDomainPtr dom, const char *disk,
  * VIR_DOMAIN_BLOCK_COMMIT_DELETE, then this command will unlink all files
  * that were invalidated, after the commit successfully completes.
  *
+ * If @flags contains VIR_DOMAIN_BLOCK_COMMIT_RELATIVE, the name recorded
+ * into the overlay of the @top image (if there is such image) as the
+ * path to the new backing file will be kept relative to other images.
+ * The operation will fail if libvirt can't infer the name.
+ *
  * By default, if @base is NULL, the commit target will be the bottom of
  * the backing chain; if @flags contains VIR_DOMAIN_BLOCK_COMMIT_SHALLOW,
  * then the immediate backing file of @top will be used instead.  If @top
index 3efacede8cc7cf8dcb78dac9cfc6cebc8015ecf7..ff804c54479dc5027d037371c99bafad73f4fe60 100644 (file)
@@ -1505,6 +1505,8 @@ blockJobImpl(vshControl *ctl, const vshCmd *cmd,
             vshCommandOptBool(cmd, "pivot") ||
             vshCommandOptBool(cmd, "keep-overlay"))
             flags |= VIR_DOMAIN_BLOCK_COMMIT_ACTIVE;
+        if (vshCommandOptBool(cmd, "keep-relative"))
+            flags |= VIR_DOMAIN_BLOCK_COMMIT_RELATIVE;
         ret = virDomainBlockCommit(dom, path, base, top, bandwidth, flags);
         break;
     case VSH_CMD_BLOCK_JOB_COPY:
@@ -1638,6 +1640,10 @@ static const vshCmdOptDef opts_block_commit[] = {
      .type = VSH_OT_BOOL,
      .help = N_("with --wait, don't wait for cancel to finish")
     },
+    {.name = "keep-relative",
+     .type = VSH_OT_BOOL,
+     .help = N_("keep the backing chain relatively referenced")
+    },
     {.name = NULL}
 };
 
index 1b6f3c40ee8b670fd3eec697997c6e1d34441eea..7f0e76a3efb0e9cc2791dfeaec7c3346c82c85eb 100644 (file)
@@ -820,7 +820,7 @@ address of virtual interface (such as I<detach-interface> or
 I<domif-setlink>) will accept the MAC address printed by this command.
 
 =item B<blockcommit> I<domain> I<path> [I<bandwidth>]
-[I<base>] [I<--shallow>] [I<top>] [I<--delete>]
+[I<base>] [I<--shallow>] [I<top>] [I<--delete>] [I<--keep-relative>]
 [I<--wait> [I<--async>] [I<--verbose>]] [I<--timeout> B<seconds>]
 [I<--active>] [{I<--pivot> | I<--keep-overlay>}]
 
@@ -833,7 +833,8 @@ I<--shallow> can be used instead of I<base> to specify the immediate
 backing file of the resulting top image to be committed.  The files
 being committed are rendered invalid, possibly as soon as the operation
 starts; using the I<--delete> flag will attempt to remove these invalidated
-files at the successful completion of the commit operation.
+files at the successful completion of the commit operation. When the
+I<--keep-relative> flag is used, the backing file paths will be kept relative.
 
 When I<top> is omitted or specified as the active image, it is also
 possible to specify I<--active> to trigger a two-phase active commit. In