static int
qemuDomainSnapshotPrepareDiskExternalActive(virDomainSnapshotDiskDefPtr snapdisk,
- virDomainDiskDefPtr domdisk)
+ virDomainDiskDefPtr domdisk,
+ bool blockdev)
{
int actualType = virStorageSourceGetActualType(snapdisk->src);
break;
case VIR_STORAGE_TYPE_NETWORK:
+ /* defer all of the checking to either qemu or libvirt's blockdev code */
+ if (blockdev)
+ break;
+
switch ((virStorageNetProtocol) snapdisk->src->protocol) {
case VIR_STORAGE_NET_PROTOCOL_GLUSTER:
break;
qemuDomainSnapshotPrepareDiskExternal(virDomainDiskDefPtr disk,
virDomainSnapshotDiskDefPtr snapdisk,
bool active,
- bool reuse)
+ bool reuse,
+ bool blockdev)
{
struct stat st;
int err;
if (qemuDomainSnapshotPrepareDiskExternalInactive(snapdisk, disk) < 0)
return -1;
} else {
- if (qemuDomainSnapshotPrepareDiskExternalActive(snapdisk, disk) < 0)
+ if (qemuDomainSnapshotPrepareDiskExternalActive(snapdisk, disk, blockdev) < 0)
return -1;
}
virDomainSnapshotDefPtr def,
unsigned int *flags)
{
+ qemuDomainObjPrivatePtr priv = vm->privateData;
+ bool blockdev = virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV);
int ret = -1;
size_t i;
bool active = virDomainObjIsActive(vm);
}
if (qemuDomainSnapshotPrepareDiskExternal(dom_disk, disk,
- active, reuse) < 0)
+ active, reuse, blockdev) < 0)
goto cleanup;
external++;