On Wed, May 07, 2014 at 10:04:08PM +0400, Dmitry Guryanov wrote: > Disks support in this driver was implemented with an assumption, > that disk images can't be created by hand, without VM. So > complex storage driver was implemented with workaround. > > This is not true, we can create new disks using ploop tool. > So the first step to reimplement disks support in parallels > driver is to do not use information from the storage driver, > until we will implement VIR_STORAGE_TYPE_VOLUME disks. > > So after this patch disks can be added in the same way as > in any other driver: you create a disk image and then add > an entry to the XML definition of the domain with path to that > image file, for example: > > <disk type='file' device='disk'> > <driver type='ploop'/> > <source file='/storage/harddisk1.hdd'/> > <target dev='sda' bus='sata'/> > <address type='drive' controller='0' bus='0' target='0' unit='0'/> > </disk> > > This patch makes parallels storage driver useless, but I'll fix it > later. Now you can create an image by hand, using ploop tool, > and then add it to some domain. > > Signed-off-by: Dmitry Guryanov <dguryanov@xxxxxxxxxxxxx> > --- > src/parallels/parallels_driver.c | 83 ++++++++++++++-------------------------- > 1 file changed, 28 insertions(+), 55 deletions(-) > > diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c > index b2de12f..67b28c4 100644 > --- a/src/parallels/parallels_driver.c > +++ b/src/parallels/parallels_driver.c > @@ -1605,17 +1605,34 @@ parallelsApplyVideoParams(parallelsDomObjPtr pdom, > return 0; > } > > -static int parallelsAddHddByVolume(parallelsDomObjPtr pdom, > - virDomainDiskDefPtr disk, > - virStoragePoolObjPtr pool, > - virStorageVolDefPtr voldef) > +static int parallelsAddHdd(parallelsDomObjPtr pdom, > + virDomainDiskDefPtr disk) > { > int ret = -1; > + const char *src = virDomainDiskGetSource(disk); > + int type = virDomainDiskGetType(disk); > const char *strbus; > > virCommandPtr cmd = virCommandNewArgList(PRLCTL, "set", pdom->uuid, > "--device-add", "hdd", NULL); > - virCommandAddArgFormat(cmd, "--size=%lluM", voldef->target.capacity >> 20); > + > + if (type == VIR_STORAGE_TYPE_FILE) { > + int format = virDomainDiskGetFormat(disk); > + > + if (format != VIR_STORAGE_FILE_PLOOP) > + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, > + _("Invalid disk format: %d"), type); Missing a 'goto cleanup' after reporting the error, so that execution returns > + > + virCommandAddArg(cmd, "--image"); > + } else if (VIR_STORAGE_TYPE_BLOCK) { > + virCommandAddArg(cmd, "--device"); > + } else { > + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, > + _("Invalid disk type: %d"), type); > + goto cleanup; > + } > + > + virCommandAddArg(cmd, src); > > if (!(strbus = parallelsGetDiskBusName(disk->bus))) { > virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, > @@ -1632,54 +1649,10 @@ static int parallelsAddHddByVolume(parallelsDomObjPtr pdom, > if (virCommandRun(cmd, NULL) < 0) > goto cleanup; Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list