Part of a series of cleanups to use new accessor methods.
* src/qemu/qemu_conf.c (qemuCheckSharedDevice)
(qemuAddSharedDevice, qemuRemoveSharedDevice, qemuSetUnprivSGIO):
Use accessors.
* src/qemu/qemu_domain.c (qemuDomainDeviceDefPostParse)
(qemuDomainObjCheckDiskTaint, qemuDomainSnapshotForEachQcow2Raw)
(qemuDomainCheckRemoveOptionalDisk, qemuDomainCheckDiskPresence)
(qemuDiskChainCheckBroken, qemuDomainDetermineDiskChain):
Likewise.
* src/qemu/qemu_hotplug.c (qemuDomainChangeEjectableMedia)
(qemuDomainCheckEjectableMedia)
(qemuDomainAttachVirtioDiskDevice, qemuDomainAttachSCSIDisk)
(qemuDomainAttachUSBMassstorageDevice)
(qemuDomainAttachDeviceDiskLive, qemuDomainRemoveDiskDevice)
(qemuDomainDetachVirtioDiskDevice, qemuDomainDetachDiskDevice):
Likewise.
* src/qemu/qemu_migration.c (qemuMigrationStartNBDServer)
(qemuMigrationDriveMirror, qemuMigrationCancelDriveMirror)
(qemuMigrationIsSafe): Likewise.
* src/qemu/qemu_process.c (qemuProcessGetVolumeQcowPassphrase)
(qemuProcessHandleIOError, qemuProcessHandleBlockJob)
(qemuProcessInitPasswords): Likewise.
* src/qemu/qemu_driver.c (qemuDomainChangeDiskMediaLive)
(qemuDomainGetBlockInfo, qemuDiskPathToAlias): Likewise.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
src/qemu/qemu_conf.c | 22 +++++----
src/qemu/qemu_domain.c | 60 +++++++++++++-----------
src/qemu/qemu_driver.c | 18 +++----
src/qemu/qemu_hotplug.c | 116 ++++++++++++++++++++++++++--------------------
src/qemu/qemu_migration.c | 17 +++----
src/qemu/qemu_process.c | 11 +++--
6 files changed, 135 insertions(+), 109 deletions(-)
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 91c5e3a..d280c2c 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -1,7 +1,7 @@
/*
* qemu_conf.c: QEMU configuration management
*
- * Copyright (C) 2006-2013 Red Hat, Inc.
+ * Copyright (C) 2006-2014 Red Hat, Inc.
* Copyright (C) 2006 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
@@ -744,6 +744,7 @@ qemuCheckSharedDevice(virHashTablePtr sharedDevices,
char *key = NULL;
int val;
int ret = 0;
+ const char *src;
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
disk = dev->data.disk;
@@ -757,7 +758,8 @@ qemuCheckSharedDevice(virHashTablePtr sharedDevices,
return 0;
}
- if (!(sysfs_path = virGetUnprivSGIOSysfsPath(disk->src, NULL))) {
+ src = virDomainDiskGetSource(disk);
+ if (!(sysfs_path = virGetUnprivSGIOSysfsPath(src, NULL))) {
ret = -1;
goto cleanup;
}
@@ -768,7 +770,7 @@ qemuCheckSharedDevice(virHashTablePtr sharedDevices,
if (!virFileExists(sysfs_path))
goto cleanup;
- if (!(key = qemuGetSharedDeviceKey(disk->src))) {
+ if (!(key = qemuGetSharedDeviceKey(src))) {
ret = -1;
goto cleanup;
}
@@ -779,7 +781,7 @@ qemuCheckSharedDevice(virHashTablePtr sharedDevices,
if (!(virHashLookup(sharedDevices, key)))
goto cleanup;
- if (virGetDeviceUnprivSGIO(disk->src, NULL, &val) < 0) {
+ if (virGetDeviceUnprivSGIO(src, NULL, &val) < 0) {
ret = -1;
goto cleanup;
}
@@ -791,7 +793,7 @@ qemuCheckSharedDevice(virHashTablePtr sharedDevices,
disk->sgio == VIR_DOMAIN_DEVICE_SGIO_UNFILTERED))
goto cleanup;
- if (disk->type == VIR_DOMAIN_DISK_TYPE_VOLUME) {
+ if (virDomainDiskGetType(disk) == VIR_DOMAIN_DISK_TYPE_VOLUME) {
virReportError(VIR_ERR_OPERATION_INVALID,
_("sgio of shared disk 'pool=%s' 'volume=%s'
conflicts "
"with other active domains"),
@@ -800,7 +802,7 @@ qemuCheckSharedDevice(virHashTablePtr sharedDevices,
} else {
virReportError(VIR_ERR_OPERATION_INVALID,
_("sgio of shared disk '%s' conflicts with other
"
- "active domains"), disk->src);
+ "active domains"), src);
}
ret = -1;
@@ -917,7 +919,7 @@ qemuAddSharedDevice(virQEMUDriverPtr driver,
goto cleanup;
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
- if (!(key = qemuGetSharedDeviceKey(disk->src)))
+ if (!(key = qemuGetSharedDeviceKey(virDomainDiskGetSource(disk))))
goto cleanup;
} else {
if (!(dev_name = virSCSIDeviceGetDevName(NULL,
@@ -1022,7 +1024,7 @@ qemuRemoveSharedDevice(virQEMUDriverPtr driver,
qemuDriverLock(driver);
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
- if (!(key = qemuGetSharedDeviceKey(disk->src)))
+ if (!(key = qemuGetSharedDeviceKey(virDomainDiskGetSource(disk))))
goto cleanup;
} else {
if (!(dev_name = virSCSIDeviceGetDevName(NULL,
@@ -1079,7 +1081,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
virDomainDiskDefPtr disk = NULL;
virDomainHostdevDefPtr hostdev = NULL;
char *sysfs_path = NULL;
- char *path = NULL;
+ const char *path = NULL;
int val = -1;
int ret = 0;
@@ -1093,7 +1095,7 @@ qemuSetUnprivSGIO(virDomainDeviceDefPtr dev)
!virDomainDiskSourceIsBlockType(disk))
return 0;
- path = disk->src;
+ path = virDomainDiskGetSource(disk);
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
hostdev = dev->data.hostdev;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 7d375e5..d417387 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -872,10 +872,10 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
/* assign default storage format and driver according to config */
if (cfg->allowDiskFormatProbing) {
/* default disk format for drives */
- if (disk->format == VIR_STORAGE_FILE_NONE &&
- (disk->type == VIR_DOMAIN_DISK_TYPE_FILE ||
- disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK))
- disk->format = VIR_STORAGE_FILE_AUTO;
+ if (virDomainDiskGetFormat(disk) == VIR_STORAGE_FILE_NONE &&
+ (virDomainDiskGetType(disk) == VIR_DOMAIN_DISK_TYPE_FILE ||
+ virDomainDiskGetType(disk) == VIR_DOMAIN_DISK_TYPE_BLOCK))
+ virDomainDiskSetFormat(disk, VIR_STORAGE_FILE_AUTO);
/* default disk format for mirrored drive */
if (disk->mirror &&
@@ -883,15 +883,15 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
disk->mirrorFormat = VIR_STORAGE_FILE_AUTO;
} else {
/* default driver if probing is forbidden */
- if (!disk->driverName &&
- VIR_STRDUP(disk->driverName, "qemu") < 0)
+ if (!virDomainDiskGetDriver(disk) &&
+ virDomainDiskSetDriver(disk, "qemu") < 0)
goto cleanup;
/* default disk format for drives */
- if (disk->format == VIR_STORAGE_FILE_NONE &&
- (disk->type == VIR_DOMAIN_DISK_TYPE_FILE ||
- disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK))
- disk->format = VIR_STORAGE_FILE_RAW;
+ if (virDomainDiskGetFormat(disk) == VIR_STORAGE_FILE_NONE &&
+ (virDomainDiskGetType(disk) == VIR_DOMAIN_DISK_TYPE_FILE ||
+ virDomainDiskGetType(disk) == VIR_DOMAIN_DISK_TYPE_BLOCK))
+ virDomainDiskSetFormat(disk, VIR_STORAGE_FILE_RAW);
/* default disk format for mirrored drive */
if (disk->mirror &&
@@ -1697,8 +1697,9 @@ void qemuDomainObjCheckDiskTaint(virQEMUDriverPtr driver,
int logFD)
{
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+ int format = virDomainDiskGetFormat(disk);
- if ((!disk->format || disk->format == VIR_STORAGE_FILE_AUTO) &&
+ if ((!format || format == VIR_STORAGE_FILE_AUTO) &&
cfg->allowDiskFormatProbing)
qemuDomainObjTaint(driver, obj, VIR_DOMAIN_TAINT_DISK_PROBING, logFD);
@@ -1939,8 +1940,9 @@ qemuDomainSnapshotForEachQcow2Raw(virQEMUDriverPtr driver,
for (i = 0; i < ndisks; i++) {
/* FIXME: we also need to handle LVM here */
if (def->disks[i]->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
- if (def->disks[i]->format > 0 &&
- def->disks[i]->format != VIR_STORAGE_FILE_QCOW2) {
+ int format = virDomainDiskGetFormat(def->disks[i]);
+
+ if (format > 0 && format != VIR_STORAGE_FILE_QCOW2) {
if (try_all) {
/* Continue on even in the face of error, since other
* disks in this VM may have the same snapshot name.
@@ -1962,7 +1964,7 @@ qemuDomainSnapshotForEachQcow2Raw(virQEMUDriverPtr driver,
return -1;
}
- qemuimgarg[4] = def->disks[i]->src;
+ qemuimgarg[4] = virDomainDiskGetSource(def->disks[i]);
if (virRun(qemuimgarg, NULL) < 0) {
if (try_all) {
@@ -2160,28 +2162,29 @@ qemuDomainCheckRemoveOptionalDisk(virQEMUDriverPtr driver,
char uuid[VIR_UUID_STRING_BUFLEN];
virObjectEventPtr event = NULL;
virDomainDiskDefPtr del_disk = NULL;
+ const char *src = virDomainDiskGetSource(disk);
virUUIDFormat(vm->def->uuid, uuid);
VIR_DEBUG("Dropping disk '%s' on domain '%s' (UUID '%s')
"
"due to inaccessible source '%s'",
- disk->dst, vm->def->name, uuid, disk->src);
+ disk->dst, vm->def->name, uuid, src);
if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ||
disk->device == VIR_DOMAIN_DISK_DEVICE_FLOPPY) {
- event = virDomainEventDiskChangeNewFromObj(vm, disk->src, NULL,
+ event = virDomainEventDiskChangeNewFromObj(vm, src, NULL,
disk->info.alias,
VIR_DOMAIN_EVENT_DISK_CHANGE_MISSING_ON_START);
- VIR_FREE(disk->src);
+ ignore_value(virDomainDiskSetSource(disk, NULL));
} else {
- event = virDomainEventDiskChangeNewFromObj(vm, disk->src, NULL,
+ event = virDomainEventDiskChangeNewFromObj(vm, src, NULL,
disk->info.alias,
VIR_DOMAIN_EVENT_DISK_DROP_MISSING_ON_START);
- if (!(del_disk = virDomainDiskRemoveByName(vm->def, disk->src))) {
+ if (!(del_disk = virDomainDiskRemoveByName(vm->def, src))) {
virReportError(VIR_ERR_INVALID_ARG,
- _("no source device %s"), disk->src);
+ _("no source device %s"), src);
return -1;
}
virDomainDiskDefFree(del_disk);
@@ -2244,7 +2247,7 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
for (i = vm->def->ndisks; i > 0; i--) {
disk = vm->def->disks[i - 1];
- if (!disk->src)
+ if (!virDomainDiskGetSource(disk))
continue;
if (qemuDomainDetermineDiskChain(driver, vm, disk, false) >= 0 &&
@@ -2339,7 +2342,7 @@ qemuDiskChainCheckBroken(virDomainDiskDefPtr disk)
{
char *brokenFile = NULL;
- if (!disk->src || !disk->backingChain)
+ if (!virDomainDiskGetSource(disk) || !disk->backingChain)
return 0;
if (virStorageFileChainGetBroken(disk->backingChain, &brokenFile) < 0)
@@ -2348,7 +2351,7 @@ qemuDiskChainCheckBroken(virDomainDiskDefPtr disk)
if (brokenFile) {
virReportError(VIR_ERR_INVALID_ARG,
_("Backing file '%s' of image '%s' is
missing."),
- brokenFile, disk->src);
+ brokenFile, virDomainDiskGetSource(disk));
VIR_FREE(brokenFile);
return -1;
}
@@ -2396,10 +2399,12 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
int ret = 0;
uid_t uid;
gid_t gid;
+ const char *src = virDomainDiskGetSource(disk);
+ int type = virDomainDiskGetType(disk);
- if (!disk->src ||
- disk->type == VIR_DOMAIN_DISK_TYPE_NETWORK ||
- disk->type == VIR_DOMAIN_DISK_TYPE_VOLUME)
+ if (!src ||
+ type == VIR_DOMAIN_DISK_TYPE_NETWORK ||
+ type == VIR_DOMAIN_DISK_TYPE_VOLUME)
goto cleanup;
if (disk->backingChain) {
@@ -2413,7 +2418,8 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
qemuDomainGetImageIds(cfg, vm, disk, &uid, &gid);
- disk->backingChain = virStorageFileGetMetadata(disk->src, disk->format,
+ disk->backingChain = virStorageFileGetMetadata(src,
+ virDomainDiskGetFormat(disk),
uid, gid,
cfg->allowDiskFormatProbing);
if (!disk->backingChain)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2707bec..3b82c5a 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6520,7 +6520,7 @@ qemuDomainChangeDiskMediaLive(virConnectPtr conn,
if (ret != 0 &&
qemuTeardownDiskCgroup(vm, disk) < 0)
VIR_WARN("Failed to teardown cgroup for disk path %s",
- NULLSTR(disk->src));
+ NULLSTR(virDomainDiskGetSource(disk)));
end:
virObjectUnref(caps);
@@ -10265,13 +10265,13 @@ qemuDomainGetBlockInfo(virDomainPtr dom,
goto cleanup;
}
disk = vm->def->disks[idx];
- if (!disk->src) {
+ path = virDomainDiskGetSource(disk);
+ if (!path) {
virReportError(VIR_ERR_INVALID_ARG,
_("disk %s does not currently have a source assigned"),
path);
goto cleanup;
}
- path = disk->src;
/* The path is correct, now try to open it and get its size. */
fd = qemuOpenFile(driver, vm, path, O_RDONLY, NULL, NULL);
@@ -10279,18 +10279,18 @@ qemuDomainGetBlockInfo(virDomainPtr dom,
goto cleanup;
/* Probe for magic formats */
- if (disk->format) {
- format = disk->format;
+ if (virDomainDiskGetFormat(disk)) {
+ format = virDomainDiskGetFormat(disk);
} else {
if (cfg->allowDiskFormatProbing) {
- if ((format = virStorageFileProbeFormat(disk->src,
+ if ((format = virStorageFileProbeFormat(path,
cfg->user,
cfg->group)) < 0)
goto cleanup;
} else {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("no disk format for %s and probing is disabled"),
- disk->src);
+ path);
goto cleanup;
}
}
@@ -10341,7 +10341,7 @@ qemuDomainGetBlockInfo(virDomainPtr dom,
/* ..but if guest is not using raw disk format and on a block device,
* then query highest allocated extent from QEMU
*/
- if (disk->type == VIR_DOMAIN_DISK_TYPE_BLOCK &&
+ if (virDomainDiskGetType(disk) == VIR_DOMAIN_DISK_TYPE_BLOCK &&
format != VIR_STORAGE_FILE_RAW &&
S_ISBLK(sb.st_mode)) {
qemuDomainObjPrivatePtr priv = vm->privateData;
@@ -14620,7 +14620,7 @@ qemuDiskPathToAlias(virDomainObjPtr vm, const char *path, int
*idxret)
if (idxret)
*idxret = idx;
- if (disk->src) {
+ if (virDomainDiskGetSource(disk)) {
if (virAsprintf(&ret, "drive-%s", disk->info.alias) < 0)
return NULL;
}
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index bf4f160..b948f2c 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -71,6 +71,7 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
qemuDomainObjPrivatePtr priv = vm->privateData;
int retries = CHANGE_MEDIA_RETRIES;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+ const char *src = NULL;
if (!origdisk->info.alias) {
virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -93,7 +94,8 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
if (virSecurityManagerSetImageLabel(driver->securityManager,
vm->def, disk) < 0) {
if (virDomainLockDiskDetach(driver->lockManager, vm, disk) < 0)
- VIR_WARN("Unable to release lock on %s", disk->src);
+ VIR_WARN("Unable to release lock on %s",
+ virDomainDiskGetSource(disk));
goto cleanup;
}
@@ -128,41 +130,49 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
}
ret = 0;
- if (disk->src) {
+ src = virDomainDiskGetSource(disk);
+ if (src) {
/* deliberately don't depend on 'ret' as 'eject' may have
failed the
* first time and we are going to check the drive state anyway */
const char *format = NULL;
+ int type = virDomainDiskGetType(disk);
+ int diskFormat = virDomainDiskGetFormat(disk);
- if (disk->type != VIR_DOMAIN_DISK_TYPE_DIR) {
- if (disk->format > 0)
- format = virStorageFileFormatTypeToString(disk->format);
- else if (origdisk->format > 0)
- format = virStorageFileFormatTypeToString(origdisk->format);
+ if (type != VIR_DOMAIN_DISK_TYPE_DIR) {
+ if (diskFormat > 0) {
+ format = virStorageFileFormatTypeToString(diskFormat);
+ } else {
+ diskFormat = virDomainDiskGetFormat(origdisk);
+ if (diskFormat > 0)
+ format = virStorageFileFormatTypeToString(diskFormat);
+ }
}
qemuDomainObjEnterMonitor(driver, vm);
ret = qemuMonitorChangeMedia(priv->mon,
driveAlias,
- disk->src, format);
+ src, format);
qemuDomainObjExitMonitor(driver, vm);
}
audit:
- virDomainAuditDisk(vm, origdisk->src, disk->src, "update", ret >=
0);
+ if (src)
+ virDomainAuditDisk(vm, virDomainDiskGetSource(origdisk),
+ src, "update", ret >= 0);
if (ret < 0)
goto error;
if (virSecurityManagerRestoreImageLabel(driver->securityManager,
vm->def, origdisk) < 0)
- VIR_WARN("Unable to restore security label on ejected image %s",
origdisk->src);
+ VIR_WARN("Unable to restore security label on ejected image %s",
+ virDomainDiskGetSource(origdisk));
if (virDomainLockDiskDetach(driver->lockManager, vm, origdisk) < 0)
- VIR_WARN("Unable to release lock on disk %s", origdisk->src);
-
- VIR_FREE(origdisk->src);
- origdisk->src = disk->src;
- disk->src = NULL;
- origdisk->type = disk->type;
+ VIR_WARN("Unable to release lock on disk %s",
+ virDomainDiskGetSource(origdisk));
+ if (virDomainDiskSetSource(origdisk, src) < 0)
+ goto error;
+ virDomainDiskSetType(origdisk, virDomainDiskGetType(disk));
virDomainDiskDefFree(disk);
@@ -174,10 +184,10 @@ cleanup:
error:
if (virSecurityManagerRestoreImageLabel(driver->securityManager,
vm->def, disk) < 0)
- VIR_WARN("Unable to restore security label on new media %s",
disk->src);
+ VIR_WARN("Unable to restore security label on new media %s", src);
if (virDomainLockDiskDetach(driver->lockManager, vm, disk) < 0)
- VIR_WARN("Unable to release lock on %s", disk->src);
+ VIR_WARN("Unable to release lock on %s", src);
goto cleanup;
}
@@ -213,8 +223,8 @@ qemuDomainCheckEjectableMedia(virQEMUDriverPtr driver,
if (!info)
goto cleanup;
- if (info->tray_open && disk->src)
- VIR_FREE(disk->src);
+ if (info->tray_open && virDomainDiskGetSource(disk))
+ ignore_value(virDomainDiskSetSource(disk, NULL));
}
ret = 0;
@@ -238,6 +248,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
char *drivestr = NULL;
bool releaseaddr = false;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+ const char *src = virDomainDiskGetSource(disk);
if (!disk->info.type) {
if (STREQLEN(vm->def->os.machine, "s390-ccw", 8) &&
@@ -262,7 +273,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
if (virSecurityManagerSetImageLabel(driver->securityManager,
vm->def, disk) < 0) {
if (virDomainLockDiskDetach(driver->lockManager, vm, disk) < 0)
- VIR_WARN("Unable to release lock on %s", disk->src);
+ VIR_WARN("Unable to release lock on %s", src);
goto cleanup;
}
@@ -311,10 +322,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
} else if (!disk->info.type ||
disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) {
virDevicePCIAddress guestAddr = disk->info.addr.pci;
- ret = qemuMonitorAddPCIDisk(priv->mon,
- disk->src,
- type,
- &guestAddr);
+ ret = qemuMonitorAddPCIDisk(priv->mon, src, type, &guestAddr);
if (ret == 0) {
disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
memcpy(&disk->info.addr.pci, &guestAddr, sizeof(guestAddr));
@@ -322,7 +330,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
}
qemuDomainObjExitMonitor(driver, vm);
- virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
+ virDomainAuditDisk(vm, NULL, src, "attach", ret >= 0);
if (ret < 0)
goto error;
@@ -337,14 +345,14 @@ cleanup:
error:
if (releaseaddr)
- qemuDomainReleaseDeviceAddress(vm, &disk->info, disk->src);
+ qemuDomainReleaseDeviceAddress(vm, &disk->info, src);
if (virSecurityManagerRestoreImageLabel(driver->securityManager,
vm->def, disk) < 0)
- VIR_WARN("Unable to restore security label on %s", disk->src);
+ VIR_WARN("Unable to restore security label on %s", src);
if (virDomainLockDiskDetach(driver->lockManager, vm, disk) < 0)
- VIR_WARN("Unable to release lock on %s", disk->src);
+ VIR_WARN("Unable to release lock on %s", src);
goto cleanup;
}
@@ -487,6 +495,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn,
char *devstr = NULL;
int ret = -1;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+ const char *src = virDomainDiskGetSource(disk);
for (i = 0; i < vm->def->ndisks; i++) {
if (STREQ(vm->def->disks[i]->dst, disk->dst)) {
@@ -503,7 +512,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn,
if (virSecurityManagerSetImageLabel(driver->securityManager,
vm->def, disk) < 0) {
if (virDomainLockDiskDetach(driver->lockManager, vm, disk) < 0)
- VIR_WARN("Unable to release lock on %s", disk->src);
+ VIR_WARN("Unable to release lock on %s", src);
goto cleanup;
}
@@ -574,7 +583,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn,
}
qemuDomainObjExitMonitor(driver, vm);
- virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
+ virDomainAuditDisk(vm, NULL, src, "attach", ret >= 0);
if (ret < 0)
goto error;
@@ -590,10 +599,10 @@ cleanup:
error:
if (virSecurityManagerRestoreImageLabel(driver->securityManager,
vm->def, disk) < 0)
- VIR_WARN("Unable to restore security label on %s", disk->src);
+ VIR_WARN("Unable to restore security label on %s", src);
if (virDomainLockDiskDetach(driver->lockManager, vm, disk) < 0)
- VIR_WARN("Unable to release lock on %s", disk->src);
+ VIR_WARN("Unable to release lock on %s", src);
goto cleanup;
}
@@ -611,6 +620,7 @@ qemuDomainAttachUSBMassstorageDevice(virConnectPtr conn,
char *drivestr = NULL;
char *devstr = NULL;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
+ const char *src = virDomainDiskGetSource(disk);
for (i = 0; i < vm->def->ndisks; i++) {
if (STREQ(vm->def->disks[i]->dst, disk->dst)) {
@@ -627,12 +637,12 @@ qemuDomainAttachUSBMassstorageDevice(virConnectPtr conn,
if (virSecurityManagerSetImageLabel(driver->securityManager,
vm->def, disk) < 0) {
if (virDomainLockDiskDetach(driver->lockManager, vm, disk) < 0)
- VIR_WARN("Unable to release lock on %s", disk->src);
+ VIR_WARN("Unable to release lock on %s", src);
goto cleanup;
}
/* XXX not correct once we allow attaching a USB CDROM */
- if (!disk->src) {
+ if (!src) {
virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("disk source path is missing"));
goto error;
@@ -663,11 +673,11 @@ qemuDomainAttachUSBMassstorageDevice(virConnectPtr conn,
}
}
} else {
- ret = qemuMonitorAddUSBDisk(priv->mon, disk->src);
+ ret = qemuMonitorAddUSBDisk(priv->mon, src);
}
qemuDomainObjExitMonitor(driver, vm);
- virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
+ virDomainAuditDisk(vm, NULL, src, "attach", ret >= 0);
if (ret < 0)
goto error;
@@ -683,10 +693,10 @@ cleanup:
error:
if (virSecurityManagerRestoreImageLabel(driver->securityManager,
vm->def, disk) < 0)
- VIR_WARN("Unable to restore security label on %s", disk->src);
+ VIR_WARN("Unable to restore security label on %s", src);
if (virDomainLockDiskDetach(driver->lockManager, vm, disk) < 0)
- VIR_WARN("Unable to release lock on %s", disk->src);
+ VIR_WARN("Unable to release lock on %s", src);
goto cleanup;
}
@@ -704,11 +714,13 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
virDomainDiskDefPtr tmp = NULL;
virCapsPtr caps = NULL;
int ret = -1;
+ const char *driverName = virDomainDiskGetDriver(disk);
+ const char *src = virDomainDiskGetSource(disk);
- if (disk->driverName != NULL && !STREQ(disk->driverName,
"qemu")) {
+ if (driverName && !STREQ(driverName, "qemu")) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("unsupported driver name '%s' for disk
'%s'"),
- disk->driverName, disk->src);
+ driverName, src);
goto end;
}
@@ -794,7 +806,7 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn,
if (ret != 0 &&
qemuTeardownDiskCgroup(vm, disk) < 0) {
VIR_WARN("Failed to teardown cgroup for disk path %s",
- NULLSTR(disk->src));
+ NULLSTR(src));
}
end:
@@ -2460,11 +2472,12 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
virDomainDeviceDef dev;
virObjectEventPtr event;
size_t i;
+ const char *src = virDomainDiskGetSource(disk);
VIR_DEBUG("Removing disk %s from domain %p %s",
disk->info.alias, vm, vm->def->name);
- virDomainAuditDisk(vm, disk->src, NULL, "detach", true);
+ virDomainAuditDisk(vm, src, NULL, "detach", true);
event = virDomainEventDeviceRemovedNewFromObj(vm, disk->info.alias);
if (event)
@@ -2477,17 +2490,17 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
}
}
- qemuDomainReleaseDeviceAddress(vm, &disk->info, disk->src);
+ qemuDomainReleaseDeviceAddress(vm, &disk->info, src);
if (virSecurityManagerRestoreImageLabel(driver->securityManager,
vm->def, disk) < 0)
- VIR_WARN("Unable to restore security label on %s", disk->src);
+ VIR_WARN("Unable to restore security label on %s", src);
if (qemuTeardownDiskCgroup(vm, disk) < 0)
- VIR_WARN("Failed to tear down cgroup for disk path %s", disk->src);
+ VIR_WARN("Failed to tear down cgroup for disk path %s", src);
if (virDomainLockDiskDetach(driver->lockManager, vm, disk) < 0)
- VIR_WARN("Unable to release lock on %s", disk->src);
+ VIR_WARN("Unable to release lock on %s", src);
dev.type = VIR_DOMAIN_DEVICE_DISK;
dev.data.disk = disk;
@@ -2858,14 +2871,16 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver,
if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) {
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) {
qemuDomainObjExitMonitor(driver, vm);
- virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
+ virDomainAuditDisk(vm, virDomainDiskGetSource(detach),
+ NULL, "detach", false);
goto cleanup;
}
} else {
if (qemuMonitorRemovePCIDevice(priv->mon,
&detach->info.addr.pci) < 0) {
qemuDomainObjExitMonitor(driver, vm);
- virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
+ virDomainAuditDisk(vm, virDomainDiskGetSource(detach),
+ NULL, "detach", false);
goto cleanup;
}
}
@@ -2919,7 +2934,8 @@ qemuDomainDetachDiskDevice(virQEMUDriverPtr driver,
qemuDomainObjEnterMonitor(driver, vm);
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) {
qemuDomainObjExitMonitor(driver, vm);
- virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
+ virDomainAuditDisk(vm, virDomainDiskGetSource(detach),
+ NULL, "detach", false);
goto cleanup;
}
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 26ac99b..0a243c8 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -1159,7 +1159,7 @@ qemuMigrationStartNBDServer(virQEMUDriverPtr driver,
virDomainDiskDefPtr disk = vm->def->disks[i];
/* skip shared, RO and source-less disks */
- if (disk->shared || disk->readonly || !disk->src)
+ if (disk->shared || disk->readonly || !virDomainDiskGetSource(disk))
continue;
VIR_FREE(diskAlias);
@@ -1265,7 +1265,7 @@ qemuMigrationDriveMirror(virQEMUDriverPtr driver,
virDomainBlockJobInfo info;
/* skip shared, RO and source-less disks */
- if (disk->shared || disk->readonly || !disk->src)
+ if (disk->shared || disk->readonly || !virDomainDiskGetSource(disk))
continue;
VIR_FREE(diskAlias);
@@ -1351,7 +1351,7 @@ error:
virDomainDiskDefPtr disk = vm->def->disks[--lastGood];
/* skip shared, RO disks */
- if (disk->shared || disk->readonly || !disk->src)
+ if (disk->shared || disk->readonly || !virDomainDiskGetSource(disk))
continue;
VIR_FREE(diskAlias);
@@ -1414,7 +1414,7 @@ qemuMigrationCancelDriveMirror(qemuMigrationCookiePtr mig,
virDomainDiskDefPtr disk = vm->def->disks[i];
/* skip shared, RO and source-less disks */
- if (disk->shared || disk->readonly || !disk->src)
+ if (disk->shared || disk->readonly || !virDomainDiskGetSource(disk))
continue;
VIR_FREE(diskAlias);
@@ -1523,21 +1523,22 @@ qemuMigrationIsSafe(virDomainDefPtr def)
for (i = 0; i < def->ndisks; i++) {
virDomainDiskDefPtr disk = def->disks[i];
+ const char *src = virDomainDiskGetSource(disk);
/* Our code elsewhere guarantees shared disks are either readonly (in
* which case cache mode doesn't matter) or used with cache=none */
- if (disk->src &&
+ if (src &&
!disk->shared &&
!disk->readonly &&
disk->cachemode != VIR_DOMAIN_DISK_CACHE_DISABLE) {
int rc;
- if (disk->type == VIR_DOMAIN_DISK_TYPE_FILE) {
- if ((rc = virStorageFileIsSharedFS(disk->src)) < 0)
+ if (virDomainDiskGetType(disk) == VIR_DOMAIN_DISK_TYPE_FILE) {
+ if ((rc = virStorageFileIsSharedFS(src)) < 0)
return false;
else if (rc == 0)
continue;
- if ((rc = virStorageFileIsClusterFS(disk->src)) < 0)
+ if ((rc = virStorageFileIsClusterFS(src)) < 0)
return false;
else if (rc == 1)
continue;
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 6c4543f..978e7b4 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -448,7 +448,8 @@ qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn,
enc->secrets[0]->type !=
VIR_STORAGE_ENCRYPTION_SECRET_TYPE_PASSPHRASE) {
virReportError(VIR_ERR_XML_ERROR,
- _("invalid <encryption> for volume %s"),
disk->src);
+ _("invalid <encryption> for volume %s"),
+ virDomainDiskGetSource(disk));
goto cleanup;
}
@@ -467,7 +468,7 @@ qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn,
VIR_FREE(data);
virReportError(VIR_ERR_XML_ERROR,
_("format='qcow' passphrase for %s must not contain a
"
- "'\\0'"), disk->src);
+ "'\\0'"), virDomainDiskGetSource(disk));
goto cleanup;
}
@@ -930,7 +931,7 @@ qemuProcessHandleIOError(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
disk = qemuProcessFindDomainDiskByAlias(vm, diskAlias);
if (disk) {
- srcPath = disk->src;
+ srcPath = virDomainDiskGetSource(disk);
devAlias = disk->info.alias;
} else {
srcPath = "";
@@ -987,7 +988,7 @@ qemuProcessHandleBlockJob(qemuMonitorPtr mon ATTRIBUTE_UNUSED,
disk = qemuProcessFindDomainDiskByAlias(vm, diskAlias);
if (disk) {
- path = disk->src;
+ path = virDomainDiskGetSource(disk);
event = virDomainEventBlockJobNewFromObj(vm, path, type, status);
/* XXX If we completed a block pull or commit, then recompute
* the cached backing chain to match. Better would be storing
@@ -2193,7 +2194,7 @@ qemuProcessInitPasswords(virConnectPtr conn,
const char *alias;
if (!vm->def->disks[i]->encryption ||
- !vm->def->disks[i]->src)
+ !virDomainDiskGetSource(vm->def->disks[i]))
continue;
if (qemuProcessGetVolumeQcowPassphrase(conn,
--
1.8.5.3