On 14.04.2017 13:01, Konstantin Neumoin wrote: > Signed-off-by: Konstantin Neumoin <kneumoin@xxxxxxxxxxxxx> > --- > src/vz/vz_driver.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > src/vz/vz_sdk.c | 37 ++++++++++++++++++++++++++++++++++ > src/vz/vz_sdk.h | 1 + > 3 files changed, 96 insertions(+) > > diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c > index ed7132f..24156ca 100644 > --- a/src/vz/vz_driver.c > +++ b/src/vz/vz_driver.c > @@ -3945,6 +3945,63 @@ static int vzDomainSetVcpus(virDomainPtr dom, unsigned int nvcpus) > return vzDomainSetVcpusFlags(dom, nvcpus, > VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG); > } > +static int > +vzDomainBlockResize(virDomainPtr domain, > + const char *path, > + unsigned long long size, > + unsigned int flags) > +{ > + virDomainObjPtr dom = NULL; > + virDomainDiskDefPtr disk = NULL; > + int ret = -1; > + bool job = false; > + > + virCheckFlags(VIR_DOMAIN_BLOCK_RESIZE_BYTES, -1); > + > + if (!(dom = vzDomObjFromDomainRef(domain))) > + goto cleanup; > + > + if (virDomainSetVcpusFlagsEnsureACL(domain->conn, dom->def, flags) < 0) > + goto cleanup; wrong ACL, otherwise ACK > + > + if (path[0] == '\0') { > + virReportError(VIR_ERR_INVALID_ARG, > + "%s", _("empty path")); > + goto cleanup; > + } > + > + /* sdk wants Mb */ > + if (flags & VIR_DOMAIN_BLOCK_RESIZE_BYTES) > + size /= 1024; > + size /= 1024; > + > + if (!(disk = virDomainDiskByName(dom->def, path, false))) { > + virReportError(VIR_ERR_INVALID_ARG, > + _("invalid path: %s"), path); > + goto cleanup; > + } > + > + if (vzDomainObjBeginJob(dom) < 0) > + goto cleanup; > + job = true; > + > + if (vzEnsureDomainExists(dom) < 0) > + goto cleanup; > + > + if (!virDomainObjIsActive(dom)) { > + virReportError(VIR_ERR_OPERATION_INVALID, > + "%s", _("domain is not running")); > + goto cleanup; > + } > + > + ret = prlsdkResizeImage(dom, disk, size); > + > + cleanup: > + if (job) > + vzDomainObjEndJob(dom); > + virDomainObjEndAPI(&dom); > + return ret; > +} > > static virHypervisorDriver vzHypervisorDriver = { > .name = "vz", > @@ -4046,6 +4103,7 @@ static virHypervisorDriver vzHypervisorDriver = { > .connectGetAllDomainStats = vzConnectGetAllDomainStats, /* 3.1.0 */ > .domainAbortJob = vzDomainAbortJob, /* 3.1.0 */ > .domainReset = vzDomainReset, /* 3.1.0 */ > + .domainBlockResize = vzDomainBlockResize, /* 3.3.0 */ > }; > > static virConnectDriver vzConnectDriver = { > diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c > index 2daa44a..4d2c6b0 100644 > --- a/src/vz/vz_sdk.c > +++ b/src/vz/vz_sdk.c > @@ -4925,3 +4925,40 @@ int prlsdkSetCpuCount(virDomainObjPtr dom, unsigned int count) > error: > return -1; > } > + > +int prlsdkResizeImage(virDomainObjPtr dom, virDomainDiskDefPtr disk, > + unsigned long long newsize) > +{ > + int ret = -1; > + PRL_RESULT pret; > + vzDomObjPtr privdom = dom->privateData; > + PRL_UINT32 emulatedType; > + PRL_HANDLE job = PRL_INVALID_HANDLE; > + PRL_HANDLE prldisk = PRL_INVALID_HANDLE; > + > + prldisk = prlsdkGetDisk(privdom->sdkdom, disk); > + if (prldisk == PRL_INVALID_HANDLE) > + goto cleanup; > + > + pret = PrlVmDev_GetEmulatedType(prldisk, &emulatedType); > + prlsdkCheckRetGoto(pret, cleanup); > + > + if (emulatedType != PDT_USE_IMAGE_FILE && > + emulatedType != PDT_USE_FILE_SYSTEM) { > + virReportError(VIR_ERR_INVALID_ARG, "%s", > + _("Only disk image supported for resize")); > + goto cleanup; > + } > + > + job = PrlVmDev_ResizeImage(prldisk, newsize, > + PRIF_RESIZE_LAST_PARTITION); > + if (PRL_FAILED(waitJob(job))) > + goto cleanup; > + > + ret = 0; > + > + cleanup: > + > + PrlHandle_Free(prldisk); > + return ret; > +} > diff --git a/src/vz/vz_sdk.h b/src/vz/vz_sdk.h > index 100a5e3..0a77431 100644 > --- a/src/vz/vz_sdk.h > +++ b/src/vz/vz_sdk.h > @@ -90,3 +90,4 @@ prlsdkMigrate(virDomainObjPtr dom, > PRL_HANDLE > prlsdkSdkDomainLookupByName(vzDriverPtr driver, const char *name); > int prlsdkCancelJob(virDomainObjPtr dom); > +int prlsdkResizeImage(virDomainObjPtr dom, virDomainDiskDefPtr disk, unsigned long long newsize); > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list