mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 11:35:19 +00:00
qemu: Conditionally allow block-copy for persistent domains
Allow starting the block-copy job for a persistent domain if a user declares by using a flag that the job will not be recovered if the VM is switched off while the job is active. This allows to use the block-copy job with persistent VMs under the same conditions as would apply to transient domains.
This commit is contained in:
parent
49d30bc2e2
commit
b7e534c651
@ -2428,6 +2428,9 @@ typedef enum {
|
|||||||
backing chain */
|
backing chain */
|
||||||
VIR_DOMAIN_BLOCK_COPY_REUSE_EXT = 1 << 1, /* Reuse existing external
|
VIR_DOMAIN_BLOCK_COPY_REUSE_EXT = 1 << 1, /* Reuse existing external
|
||||||
file for a copy */
|
file for a copy */
|
||||||
|
VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB = 1 << 2, /* Don't force usage of
|
||||||
|
recoverable job for the
|
||||||
|
copy operation */
|
||||||
} virDomainBlockCopyFlags;
|
} virDomainBlockCopyFlags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -10027,6 +10027,10 @@ virDomainBlockRebase(virDomainPtr dom, const char *disk,
|
|||||||
* or virDomainDetachDevice(), while a copy job is active; they may
|
* or virDomainDetachDevice(), while a copy job is active; they may
|
||||||
* also restrict a copy job to transient domains.
|
* also restrict a copy job to transient domains.
|
||||||
*
|
*
|
||||||
|
* If @flags contains VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB the job will not be
|
||||||
|
* recoverable if the VM is turned off while job is active. This flag will
|
||||||
|
* remove the restriction of copy jobs to transient domains.
|
||||||
|
*
|
||||||
* The @disk parameter is either an unambiguous source name of the
|
* The @disk parameter is either an unambiguous source name of the
|
||||||
* block device (the <source file='...'/> sub-element, such as
|
* block device (the <source file='...'/> sub-element, such as
|
||||||
* "/path/to/image"), or the device target shorthand (the
|
* "/path/to/image"), or the device target shorthand (the
|
||||||
|
@ -16507,7 +16507,8 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
|
|||||||
|
|
||||||
/* Preliminaries: find the disk we are editing, sanity checks */
|
/* Preliminaries: find the disk we are editing, sanity checks */
|
||||||
virCheckFlags(VIR_DOMAIN_BLOCK_COPY_SHALLOW |
|
virCheckFlags(VIR_DOMAIN_BLOCK_COPY_SHALLOW |
|
||||||
VIR_DOMAIN_BLOCK_COPY_REUSE_EXT, -1);
|
VIR_DOMAIN_BLOCK_COPY_REUSE_EXT |
|
||||||
|
VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB, -1);
|
||||||
|
|
||||||
priv = vm->privateData;
|
priv = vm->privateData;
|
||||||
cfg = virQEMUDriverGetConfig(driver);
|
cfg = virQEMUDriverGetConfig(driver);
|
||||||
@ -16546,7 +16547,8 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm,
|
|||||||
_("block copy is not supported with this QEMU binary"));
|
_("block copy is not supported with this QEMU binary"));
|
||||||
goto endjob;
|
goto endjob;
|
||||||
}
|
}
|
||||||
if (vm->persistent) {
|
if (!(flags & VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB) &&
|
||||||
|
vm->persistent) {
|
||||||
/* XXX if qemu ever lets us start a new domain with mirroring
|
/* XXX if qemu ever lets us start a new domain with mirroring
|
||||||
* already active, we can relax this; but for now, the risk of
|
* already active, we can relax this; but for now, the risk of
|
||||||
* 'managedsave' due to libvirt-guests means we can't risk
|
* 'managedsave' due to libvirt-guests means we can't risk
|
||||||
@ -16773,7 +16775,8 @@ qemuDomainBlockCopy(virDomainPtr dom, const char *disk, const char *destxml,
|
|||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
virCheckFlags(VIR_DOMAIN_BLOCK_COPY_SHALLOW |
|
virCheckFlags(VIR_DOMAIN_BLOCK_COPY_SHALLOW |
|
||||||
VIR_DOMAIN_BLOCK_COPY_REUSE_EXT, -1);
|
VIR_DOMAIN_BLOCK_COPY_REUSE_EXT |
|
||||||
|
VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB, -1);
|
||||||
if (virTypedParamsValidate(params, nparams,
|
if (virTypedParamsValidate(params, nparams,
|
||||||
VIR_DOMAIN_BLOCK_COPY_BANDWIDTH,
|
VIR_DOMAIN_BLOCK_COPY_BANDWIDTH,
|
||||||
VIR_TYPED_PARAM_ULLONG,
|
VIR_TYPED_PARAM_ULLONG,
|
||||||
|
Loading…
Reference in New Issue
Block a user