mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
lib: Introduce flag VIR_DOMAIN_BLOCK_REBASE_RELATIVE
Introduce flag for the block rebase API to allow the rebase operation to leave the chain relatively addressed. Also adds a virsh switch to enable this behavior.
This commit is contained in:
parent
bda44ca2ca
commit
37183e5db8
@ -2587,6 +2587,9 @@ typedef enum {
|
||||
file for a copy */
|
||||
VIR_DOMAIN_BLOCK_REBASE_COPY_RAW = 1 << 2, /* Make destination file raw */
|
||||
VIR_DOMAIN_BLOCK_REBASE_COPY = 1 << 3, /* Start a copy job */
|
||||
VIR_DOMAIN_BLOCK_REBASE_RELATIVE = 1 << 4, /* Keep backing chain
|
||||
referenced using relative
|
||||
names */
|
||||
} virDomainBlockRebaseFlags;
|
||||
|
||||
int virDomainBlockRebase(virDomainPtr dom, const char *disk,
|
||||
|
@ -19721,6 +19721,10 @@ virDomainBlockPull(virDomainPtr dom, const char *disk,
|
||||
* exists. If the job is aborted, a new one can be started later to
|
||||
* resume from the same point.
|
||||
*
|
||||
* If @flags contains VIR_DOMAIN_BLOCK_REBASE_RELATIVE, the name recorded
|
||||
* into the active disk as the location for @base will be kept relative.
|
||||
* The operation will fail if libvirt can't infer the name.
|
||||
*
|
||||
* When @flags includes VIR_DOMAIN_BLOCK_REBASE_COPY, this starts a copy,
|
||||
* where @base must be the name of a new file to copy the chain to. By
|
||||
* default, the copy will pull the entire source chain into the destination
|
||||
|
@ -1488,10 +1488,14 @@ blockJobImpl(vshControl *ctl, const vshCmd *cmd,
|
||||
case VSH_CMD_BLOCK_JOB_PULL:
|
||||
if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0)
|
||||
goto cleanup;
|
||||
if (base)
|
||||
ret = virDomainBlockRebase(dom, path, base, bandwidth, 0);
|
||||
if (vshCommandOptBool(cmd, "keep-relative"))
|
||||
flags |= VIR_DOMAIN_BLOCK_REBASE_RELATIVE;
|
||||
|
||||
if (base || flags)
|
||||
ret = virDomainBlockRebase(dom, path, base, bandwidth, flags);
|
||||
else
|
||||
ret = virDomainBlockPull(dom, path, bandwidth, 0);
|
||||
|
||||
break;
|
||||
case VSH_CMD_BLOCK_JOB_COMMIT:
|
||||
if (vshCommandOptStringReq(ctl, cmd, "base", &base) < 0 ||
|
||||
@ -2127,6 +2131,10 @@ static const vshCmdOptDef opts_block_pull[] = {
|
||||
.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}
|
||||
};
|
||||
|
||||
|
@ -911,6 +911,7 @@ I<bandwidth> specifies copying bandwidth limit in MiB/s.
|
||||
|
||||
=item B<blockpull> I<domain> I<path> [I<bandwidth>] [I<base>]
|
||||
[I<--wait> [I<--verbose>] [I<--timeout> B<seconds>] [I<--async>]]
|
||||
[I<--keep-relative>]
|
||||
|
||||
Populate a disk from its backing image chain. By default, this command
|
||||
flattens the entire chain; but if I<base> is specified, containing the
|
||||
@ -930,6 +931,9 @@ is triggered, I<--async> will return control to the user as fast as
|
||||
possible, otherwise the command may continue to block a little while
|
||||
longer until the job is done cleaning up.
|
||||
|
||||
Using the I<--keep-relative> flag will keep the backing chain names
|
||||
relative.
|
||||
|
||||
I<path> specifies fully-qualified path of the disk; it corresponds
|
||||
to a unique target name (<target dev='name'/>) or source file (<source
|
||||
file='name'/>) for one of the disk devices attached to I<domain> (see
|
||||
|
Loading…
Reference in New Issue
Block a user