On 04/27/2015 11:38 PM, Peter Krempa wrote: > On Mon, Apr 27, 2015 at 22:11:40 +0800, Shanzhi Yu wrote: >> >> On 04/27/2015 08:01 PM, Peter Krempa wrote: >>> The documentation states that for shallow block copy the image has to >>> have the same guest visible content as backing file of the current >>> image. This condition can be achieved also with a raw file (or a qcow >>> without a backing file) so remove the condition that would disallow it. >>> >>> (This patch additionally fixes crash described in >>> https://bugzilla.redhat.com/show_bug.cgi?id=1215569 since it removes >>> the code) >>> --- >>> src/qemu/qemu_driver.c | 10 ---------- >>> 1 file changed, 10 deletions(-) >>> >>> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c >>> index 70bf7aa..f979d33 100644 >>> --- a/src/qemu/qemu_driver.c >>> +++ b/src/qemu/qemu_driver.c >>> @@ -16815,16 +16815,6 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, >>> if (qemuDomainDetermineDiskChain(driver, vm, disk, false, true) < 0) >>> goto endjob; >>> >>> - if ((flags & VIR_DOMAIN_BLOCK_COPY_SHALLOW) && >>> - mirror->format == VIR_STORAGE_FILE_RAW && >>> - disk->src->backingStore->path) { >>> - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, >>> - _("disk '%s' has backing file, so raw shallow copy " >>> - "is not possible"), >>> - disk->dst); >>> - goto endjob; >>> - } >>> - >> Although a shallow blockcopy of file without backing file is >> semantically correct, but still feel a little weird. >> And, a shallow blockcommit of file without backing file will failed with >> error >> "error: invalid argument: top '/var/lib/libvirt/images/raw.img' in chain >> for 'vda' has no backing file" >> >> Should libvirt post error when try a shallow blockcopy of file without >> backing file, just as shallow blockcommit? > I cannot reproduce the error above, could you please post steps to do > that? or perhaps debug log from libvirt? It is easy to reproduce. Suppose live guest xml looks like: # virsh dumpxml vm1|grep disk -A 8 <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/raw.1430143276'/> <backingStore type='file' index='1'> <format type='raw'/> <source file='/var/lib/libvirt/images/raw.img'/> <backingStore/> </backingStore> <target dev='vda' bus='virtio'/> <alias name='virtio-disk0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </disk> Then try a shallow blockcommit of file has no backing file # virsh blockcommit vm1 vda --top vda[1] --shallow error: invalid argument: top '/var/lib/libvirt/images/raw.img' in chain for 'vda' has no backing file > > When copying from a single layer image with the --shallow flag I'm able > to successfully copy both into a raw and a qcow2 file. I also can do it. But a shallow block copy of file which has backing file into a raw file does not make any sense, right? >>> /* Prepare the destination file. */ >>> /* XXX Allow non-file mirror destinations */ >>> if (!virStorageSourceIsLocalStorage(mirror)) { > Peter -- Regards shyu -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list