[libvirt] [PATCH 0/6] Cleanups in QEMU driver wrt virConnectPtr

There are many places we can stop passing around virConnectPtr now and directly open secondary drivers where required instead. Daniel P. Berrangé (6): conf: reimplement virDomainNetResolveActualType in terms of public API qemu: stop passing virConnectPtr into qemuMonitorStartCPUs conf: stop passing virConnectPtr into virDomainDiskTranslateSourcePool qemu: don't pass virConnectPtr around for secrets qemu: stop passing in virConnectPtr for looking up networks qemu: remove virConnectPtr from some more startup code paths src/conf/domain_conf.c | 90 +++++++++++++++++++++++++---- src/conf/domain_conf.h | 14 +---- src/network/bridge_driver.c | 76 +----------------------- src/qemu/qemu_conf.c | 3 +- src/qemu/qemu_conf.h | 3 +- src/qemu/qemu_domain.c | 111 +++++++++++++++++------------------ src/qemu/qemu_domain.h | 15 ++--- src/qemu/qemu_driver.c | 126 +++++++++++++++------------------------- src/qemu/qemu_hotplug.c | 66 +++++++++------------ src/qemu/qemu_hotplug.h | 15 ++--- src/qemu/qemu_migration.c | 18 +++--- src/qemu/qemu_monitor.c | 10 ++-- src/qemu/qemu_monitor.h | 11 +--- src/qemu/qemu_monitor_json.c | 3 +- src/qemu/qemu_monitor_json.h | 3 +- src/qemu/qemu_monitor_text.c | 9 +-- src/qemu/qemu_monitor_text.h | 3 +- src/qemu/qemu_process.c | 134 +++++++++++++++++-------------------------- src/qemu/qemu_process.h | 12 ++-- tests/qemuhotplugtest.c | 4 +- tests/qemumonitorjsontest.c | 2 +- 21 files changed, 298 insertions(+), 430 deletions(-) -- 2.14.3

Now that we have the ability to easily open connections to secondary drivers, eg network:///system, it is possible to reimplement the virDomainNetResolveActualType method in terms of the public API. This avoids the need to have the network driver provide a callback for it. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/conf/domain_conf.c | 80 ++++++++++++++++++++++++++++++++++++++++----- src/conf/domain_conf.h | 11 +------ src/network/bridge_driver.c | 76 +----------------------------------------- 3 files changed, 74 insertions(+), 93 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index fb732a0c2a..4f50547580 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -28823,7 +28823,6 @@ static virDomainNetNotifyActualDeviceImpl netNotify; static virDomainNetReleaseActualDeviceImpl netRelease; static virDomainNetBandwidthChangeAllowedImpl netBandwidthChangeAllowed; static virDomainNetBandwidthUpdateImpl netBandwidthUpdate; -static virDomainNetResolveActualTypeImpl netResolveActualType; void @@ -28831,15 +28830,13 @@ virDomainNetSetDeviceImpl(virDomainNetAllocateActualDeviceImpl allocate, virDomainNetNotifyActualDeviceImpl notify, virDomainNetReleaseActualDeviceImpl release, virDomainNetBandwidthChangeAllowedImpl bandwidthChangeAllowed, - virDomainNetBandwidthUpdateImpl bandwidthUpdate, - virDomainNetResolveActualTypeImpl resolveActualType) + virDomainNetBandwidthUpdateImpl bandwidthUpdate) { netAllocate = allocate; netNotify = notify; netRelease = release; netBandwidthChangeAllowed = bandwidthChangeAllowed; netBandwidthUpdate = bandwidthUpdate; - netResolveActualType = resolveActualType; } int @@ -28908,16 +28905,83 @@ virDomainNetBandwidthUpdate(virDomainNetDefPtr iface, return netBandwidthUpdate(iface, newBandwidth); } +/* virDomainNetResolveActualType: + * @iface: the original NetDef from the domain + * + * Looks up the network reference by iface, and returns the actual + * type of the connection without allocating any resources. + * + * Returns 0 on success, -1 on failure. + */ int virDomainNetResolveActualType(virDomainNetDefPtr iface) { - if (!netResolveActualType) { - virReportError(VIR_ERR_NO_SUPPORT, "%s", - _("Network device resolve type not available")); + virConnectPtr conn = NULL; + virNetworkPtr net = NULL; + char *xml = NULL; + virNetworkDefPtr def = NULL; + int ret = -1; + + if (iface->type != VIR_DOMAIN_NET_TYPE_NETWORK) + return iface->type; + + if (iface->data.network.actual) + return iface->data.network.actual->type; + + if (!(conn = virGetConnectNetwork())) return -1; + + if (!(net = virNetworkLookupByName(conn, iface->data.network.name))) + goto cleanup; + + if (!(xml = virNetworkGetXMLDesc(net, 0))) + goto cleanup; + + if (!(def = virNetworkDefParseString(xml))) + goto cleanup; + + if ((def->forward.type == VIR_NETWORK_FORWARD_NONE) || + (def->forward.type == VIR_NETWORK_FORWARD_NAT) || + (def->forward.type == VIR_NETWORK_FORWARD_ROUTE) || + (def->forward.type == VIR_NETWORK_FORWARD_OPEN)) { + /* for these forward types, the actual net type really *is* + * NETWORK; we just keep the info from the portgroup in + * iface->data.network.actual + */ + ret = VIR_DOMAIN_NET_TYPE_NETWORK; + + } else if ((def->forward.type == VIR_NETWORK_FORWARD_BRIDGE) && + def->bridge) { + + /* <forward type='bridge'/> <bridge name='xxx'/> + * is VIR_DOMAIN_NET_TYPE_BRIDGE + */ + + ret = VIR_DOMAIN_NET_TYPE_BRIDGE; + + } else if (def->forward.type == VIR_NETWORK_FORWARD_HOSTDEV) { + + ret = VIR_DOMAIN_NET_TYPE_HOSTDEV; + + } else if ((def->forward.type == VIR_NETWORK_FORWARD_BRIDGE) || + (def->forward.type == VIR_NETWORK_FORWARD_PRIVATE) || + (def->forward.type == VIR_NETWORK_FORWARD_VEPA) || + (def->forward.type == VIR_NETWORK_FORWARD_PASSTHROUGH)) { + + /* <forward type='bridge|private|vepa|passthrough'> are all + * VIR_DOMAIN_NET_TYPE_DIRECT. + */ + + ret = VIR_DOMAIN_NET_TYPE_DIRECT; + } - return netResolveActualType(iface); + cleanup: + virNetworkDefFree(def); + VIR_FREE(xml); + virObjectUnref(conn); + virObjectUnref(net); + return ret; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 6cd81ef2de..7b450ce8f1 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3476,17 +3476,13 @@ typedef int (*virDomainNetBandwidthUpdateImpl)(virDomainNetDefPtr iface, virNetDevBandwidthPtr newBandwidth); -typedef int -(*virDomainNetResolveActualTypeImpl)(virDomainNetDefPtr iface); - void virDomainNetSetDeviceImpl(virDomainNetAllocateActualDeviceImpl allocate, virDomainNetNotifyActualDeviceImpl notify, virDomainNetReleaseActualDeviceImpl release, virDomainNetBandwidthChangeAllowedImpl bandwidthChangeAllowed, - virDomainNetBandwidthUpdateImpl bandwidthUpdate, - virDomainNetResolveActualTypeImpl resolveActualType); + virDomainNetBandwidthUpdateImpl bandwidthUpdate); int virDomainNetAllocateActualDevice(virDomainDefPtr dom, @@ -3513,11 +3509,6 @@ virDomainNetBandwidthUpdate(virDomainNetDefPtr iface, virNetDevBandwidthPtr newBandwidth) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); -/* XXX this is a nasty hack and should be removed. It should - * be by via public API by fetching XML and parsing it. Not - * easy right now as code paths in QEMU reying on this don't - * have a virConnectPtr handy. - */ int virDomainNetResolveActualType(virDomainNetDefPtr iface) ATTRIBUTE_NONNULL(1); diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index dd6e3402ea..898c946101 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -5146,79 +5146,6 @@ networkReleaseActualDevice(virDomainDefPtr dom, } - -/* networkResolveActualType: - * @iface: the original NetDef from the domain - * - * Looks up the network reference by iface, and returns the actual - * type of the connection without allocating any resources. - * - * Returns 0 on success, -1 on failure. - */ -static int -networkResolveActualType(virDomainNetDefPtr iface) -{ - virNetworkDriverStatePtr driver = networkGetDriver(); - virNetworkObjPtr obj = NULL; - virNetworkDefPtr netdef = NULL; - int ret = -1; - - if (!driver || iface->type != VIR_DOMAIN_NET_TYPE_NETWORK) - return iface->type; - - if (iface->data.network.actual) - return iface->data.network.actual->type; - - obj = virNetworkObjFindByName(driver->networks, iface->data.network.name); - if (!obj) { - virReportError(VIR_ERR_NO_NETWORK, - _("no network with matching name '%s'"), - iface->data.network.name); - return -1; - } - netdef = virNetworkObjGetDef(obj); - - if ((netdef->forward.type == VIR_NETWORK_FORWARD_NONE) || - (netdef->forward.type == VIR_NETWORK_FORWARD_NAT) || - (netdef->forward.type == VIR_NETWORK_FORWARD_ROUTE) || - (netdef->forward.type == VIR_NETWORK_FORWARD_OPEN)) { - /* for these forward types, the actual net type really *is* - * NETWORK; we just keep the info from the portgroup in - * iface->data.network.actual - */ - ret = VIR_DOMAIN_NET_TYPE_NETWORK; - - } else if ((netdef->forward.type == VIR_NETWORK_FORWARD_BRIDGE) && - netdef->bridge) { - - /* <forward type='bridge'/> <bridge name='xxx'/> - * is VIR_DOMAIN_NET_TYPE_BRIDGE - */ - - ret = VIR_DOMAIN_NET_TYPE_BRIDGE; - - } else if (netdef->forward.type == VIR_NETWORK_FORWARD_HOSTDEV) { - - ret = VIR_DOMAIN_NET_TYPE_HOSTDEV; - - } else if ((netdef->forward.type == VIR_NETWORK_FORWARD_BRIDGE) || - (netdef->forward.type == VIR_NETWORK_FORWARD_PRIVATE) || - (netdef->forward.type == VIR_NETWORK_FORWARD_VEPA) || - (netdef->forward.type == VIR_NETWORK_FORWARD_PASSTHROUGH)) { - - /* <forward type='bridge|private|vepa|passthrough'> are all - * VIR_DOMAIN_NET_TYPE_DIRECT. - */ - - ret = VIR_DOMAIN_NET_TYPE_DIRECT; - - } - - virNetworkObjEndAPI(&obj); - return ret; -} - - /** * networkCheckBandwidth: * @net: network QoS @@ -5717,8 +5644,7 @@ networkRegister(void) networkNotifyActualDevice, networkReleaseActualDevice, networkBandwidthChangeAllowed, - networkBandwidthUpdate, - networkResolveActualType); + networkBandwidthUpdate); return 0; } -- 2.14.3

On 02/09/2018 12:24 PM, Daniel P. Berrangé wrote:
Now that we have the ability to easily open connections to secondary drivers, eg network:///system, it is possible to reimplement the virDomainNetResolveActualType method in terms of the public API. This avoids the need to have the network driver provide a callback for it.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/conf/domain_conf.c | 80 ++++++++++++++++++++++++++++++++++++++++----- src/conf/domain_conf.h | 11 +------ src/network/bridge_driver.c | 76 +----------------------------------------- 3 files changed, 74 insertions(+), 93 deletions(-)
Reviewed-by: John Ferlan <jferlan@redhat.com> John

There is a long standing hack to pass a virConnectPtr into the qemuMonitorStartCPUs method, so that when the text monitor prompts for a disk password, we can lookup virSecretPtr objects. This causes us to have to pass a virConnectPtr around through countless methods up the call chain....except some places don't have any virConnectPtr available so have always just passed NULL. We can finally fix this disasterous design by using virGetConnectSecret() to open a connection to the secret driver at time of use. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_driver.c | 32 +++++++++++++++----------------- src/qemu/qemu_migration.c | 6 +++--- src/qemu/qemu_monitor.c | 10 ++++------ src/qemu/qemu_monitor.h | 11 +---------- src/qemu/qemu_monitor_json.c | 3 +-- src/qemu/qemu_monitor_json.h | 3 +-- src/qemu/qemu_monitor_text.c | 9 +++------ src/qemu/qemu_monitor_text.h | 3 +-- src/qemu/qemu_process.c | 32 +++++++++++++++----------------- src/qemu/qemu_process.h | 4 +--- tests/qemumonitorjsontest.c | 2 +- 11 files changed, 46 insertions(+), 69 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 978ecd4e07..0aa0f05d3c 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1954,7 +1954,7 @@ static int qemuDomainResume(virDomainPtr dom) } else if ((state == VIR_DOMAIN_CRASHED && reason == VIR_DOMAIN_CRASHED_PANICKED) || state == VIR_DOMAIN_PAUSED) { - if (qemuProcessStartCPUs(driver, vm, dom->conn, + if (qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_UNPAUSED, QEMU_ASYNC_JOB_NONE) < 0) { if (virGetLastError() == NULL) @@ -3346,7 +3346,7 @@ qemuDomainSaveMemory(virQEMUDriverPtr driver, * this returns (whether returning success or failure). */ static int -qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom, +qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainObjPtr vm, const char *path, int compressed, const char *compressedpath, const char *xmlin, unsigned int flags) @@ -3447,7 +3447,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom, if (ret < 0) { if (was_running && virDomainObjIsActive(vm)) { virErrorPtr save_err = virSaveLastError(); - if (qemuProcessStartCPUs(driver, vm, dom->conn, + if (qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_SAVE_CANCELED, QEMU_ASYNC_JOB_SAVE) < 0) { VIR_WARN("Unable to resume guest CPUs after save failure"); @@ -3582,7 +3582,7 @@ qemuDomainSaveFlags(virDomainPtr dom, const char *path, const char *dxml, goto cleanup; } - ret = qemuDomainSaveInternal(driver, dom, vm, path, compressed, + ret = qemuDomainSaveInternal(driver, vm, path, compressed, compressedpath, dxml, flags); cleanup: @@ -3656,7 +3656,7 @@ qemuDomainManagedSave(virDomainPtr dom, unsigned int flags) VIR_INFO("Saving state of domain '%s' to '%s'", vm->def->name, name); - ret = qemuDomainSaveInternal(driver, dom, vm, name, compressed, + ret = qemuDomainSaveInternal(driver, vm, name, compressed, compressedpath, NULL, flags); if (ret == 0) vm->hasManagedSave = true; @@ -4029,7 +4029,7 @@ qemuDomainCoreDumpWithFormat(virDomainPtr dom, } if (resume && virDomainObjIsActive(vm)) { - if (qemuProcessStartCPUs(driver, vm, dom->conn, + if (qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_UNPAUSED, QEMU_ASYNC_JOB_DUMP) < 0) { event = virDomainEventLifecycleNewFromObj(vm, @@ -4216,7 +4216,7 @@ processWatchdogEvent(virQEMUDriverPtr driver, virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("Dump failed")); - ret = qemuProcessStartCPUs(driver, vm, NULL, + ret = qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_UNPAUSED, QEMU_ASYNC_JOB_DUMP); @@ -6677,7 +6677,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn, /* If it was running before, resume it now unless caller requested pause. */ if (header->was_running && !start_paused) { - if (qemuProcessStartCPUs(driver, vm, conn, + if (qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_RESTORED, asyncJob) < 0) { if (virGetLastError() == NULL) @@ -14005,8 +14005,7 @@ qemuDomainSnapshotCreateInactiveExternal(virQEMUDriverPtr driver, /* The domain is expected to be locked and active. */ static int -qemuDomainSnapshotCreateActiveInternal(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainSnapshotCreateActiveInternal(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainSnapshotObjPtr snap, unsigned int flags) @@ -14062,7 +14061,7 @@ qemuDomainSnapshotCreateActiveInternal(virConnectPtr conn, cleanup: if (resume && virDomainObjIsActive(vm) && - qemuProcessStartCPUs(driver, vm, conn, + qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_UNPAUSED, QEMU_ASYNC_JOB_SNAPSHOT) < 0) { event = virDomainEventLifecycleNewFromObj(vm, @@ -14878,8 +14877,7 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver, static int -qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainSnapshotCreateActiveExternal(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainSnapshotObjPtr snap, unsigned int flags) @@ -15026,7 +15024,7 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn, cleanup: if (resume && virDomainObjIsActive(vm) && - qemuProcessStartCPUs(driver, vm, conn, + qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_UNPAUSED, QEMU_ASYNC_JOB_SNAPSHOT) < 0) { event = virDomainEventLifecycleNewFromObj(vm, @@ -15279,12 +15277,12 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY || snap->def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) { /* external checkpoint or disk snapshot */ - if (qemuDomainSnapshotCreateActiveExternal(domain->conn, driver, + if (qemuDomainSnapshotCreateActiveExternal(driver, vm, snap, flags) < 0) goto endjob; } else { /* internal checkpoint */ - if (qemuDomainSnapshotCreateActiveInternal(domain->conn, driver, + if (qemuDomainSnapshotCreateActiveInternal(driver, vm, snap, flags) < 0) goto endjob; } @@ -16003,7 +16001,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, _("guest unexpectedly quit")); goto endjob; } - rc = qemuProcessStartCPUs(driver, vm, snapshot->domain->conn, + rc = qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_FROM_SNAPSHOT, QEMU_ASYNC_JOB_START); if (rc < 0) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 3641b801f6..88639c71fc 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -273,7 +273,7 @@ qemuMigrationRestoreDomainState(virConnectPtr conn, virDomainObjPtr vm) VIR_DEBUG("Restoring pre-migration state due to migration error"); /* we got here through some sort of failure; start the domain again */ - if (qemuProcessStartCPUs(driver, vm, conn, + if (qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_MIGRATION_CANCELED, QEMU_ASYNC_JOB_MIGRATION_OUT) < 0) { /* Hm, we already know we are in error here. We don't want to @@ -2853,7 +2853,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, QEMU_ASYNC_JOB_MIGRATION_IN) < 0) goto stopjob; - if (qemuProcessFinishStartup(dconn, driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, + if (qemuProcessFinishStartup(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, false, VIR_DOMAIN_PAUSED_MIGRATION) < 0) goto stopjob; @@ -5389,7 +5389,7 @@ qemuMigrationFinish(virQEMUDriverPtr driver, * >= 0.10.6 to work properly. This isn't strictly necessary on * older qemu's, but it also doesn't hurt anything there */ - if (qemuProcessStartCPUs(driver, vm, dconn, + if (qemuProcessStartCPUs(driver, vm, inPostCopy ? VIR_DOMAIN_RUNNING_POSTCOPY : VIR_DOMAIN_RUNNING_MIGRATED, QEMU_ASYNC_JOB_MIGRATION_IN) < 0) { diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 9b5ad72cf9..ad5c572aee 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -1319,7 +1319,6 @@ qemuMonitorHMPCommandWithFd(qemuMonitorPtr mon, int qemuMonitorGetDiskSecret(qemuMonitorPtr mon, - virConnectPtr conn, const char *path, char **secret, size_t *secretLen) @@ -1328,7 +1327,7 @@ qemuMonitorGetDiskSecret(qemuMonitorPtr mon, *secret = NULL; *secretLen = 0; - QEMU_MONITOR_CALLBACK(mon, ret, diskSecretLookup, conn, mon->vm, + QEMU_MONITOR_CALLBACK(mon, ret, diskSecretLookup, mon->vm, path, secret, secretLen); return ret; } @@ -1700,15 +1699,14 @@ qemuMonitorSetCapabilities(qemuMonitorPtr mon) int -qemuMonitorStartCPUs(qemuMonitorPtr mon, - virConnectPtr conn) +qemuMonitorStartCPUs(qemuMonitorPtr mon) { QEMU_CHECK_MONITOR(mon); if (mon->json) - return qemuMonitorJSONStartCPUs(mon, conn); + return qemuMonitorJSONStartCPUs(mon); else - return qemuMonitorTextStartCPUs(mon, conn); + return qemuMonitorTextStartCPUs(mon); } diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index ea0c01ae7f..954ae88e4f 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -109,13 +109,7 @@ typedef void (*qemuMonitorEofNotifyCallback)(qemuMonitorPtr mon, typedef void (*qemuMonitorErrorNotifyCallback)(qemuMonitorPtr mon, virDomainObjPtr vm, void *opaque); -/* XXX we'd really like to avoid virConnectPtr here - * It is required so the callback can find the active - * secret driver. Need to change this to work like the - * security drivers do, to avoid this - */ typedef int (*qemuMonitorDiskSecretLookupCallback)(qemuMonitorPtr mon, - virConnectPtr conn, virDomainObjPtr vm, const char *path, char **secret, @@ -363,9 +357,7 @@ int qemuMonitorHMPCommandWithFd(qemuMonitorPtr mon, # define qemuMonitorHMPCommand(mon, cmd, reply) \ qemuMonitorHMPCommandWithFd(mon, cmd, -1, reply) -/* XXX same comment about virConnectPtr as above */ int qemuMonitorGetDiskSecret(qemuMonitorPtr mon, - virConnectPtr conn, const char *path, char **secret, size_t *secretLen); @@ -440,8 +432,7 @@ int qemuMonitorEmitDumpCompleted(qemuMonitorPtr mon, qemuMonitorDumpStatsPtr stats, const char *error); -int qemuMonitorStartCPUs(qemuMonitorPtr mon, - virConnectPtr conn); +int qemuMonitorStartCPUs(qemuMonitorPtr mon); int qemuMonitorStopCPUs(qemuMonitorPtr mon); typedef enum { diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 242b92ea3f..a09e93e464 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -1274,8 +1274,7 @@ qemuMonitorJSONSetCapabilities(qemuMonitorPtr mon) int -qemuMonitorJSONStartCPUs(qemuMonitorPtr mon, - virConnectPtr conn ATTRIBUTE_UNUSED) +qemuMonitorJSONStartCPUs(qemuMonitorPtr mon) { int ret; virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("cont", NULL); diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index a62e2418dc..ec243becc4 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -48,8 +48,7 @@ int qemuMonitorJSONHumanCommandWithFd(qemuMonitorPtr mon, int qemuMonitorJSONSetCapabilities(qemuMonitorPtr mon); -int qemuMonitorJSONStartCPUs(qemuMonitorPtr mon, - virConnectPtr conn); +int qemuMonitorJSONStartCPUs(qemuMonitorPtr mon); int qemuMonitorJSONStopCPUs(qemuMonitorPtr mon); int qemuMonitorJSONGetStatus(qemuMonitorPtr mon, bool *running, diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c index 2db71548cb..7c34ca5b07 100644 --- a/src/qemu/qemu_monitor_text.c +++ b/src/qemu/qemu_monitor_text.c @@ -293,9 +293,8 @@ qemuMonitorSendDiskPassphrase(qemuMonitorPtr mon, qemuMonitorMessagePtr msg, const char *data, size_t len ATTRIBUTE_UNUSED, - void *opaque) + void *opaque ATTRIBUTE_UNUSED) { - virConnectPtr conn = opaque; char *path; char *passphrase = NULL; size_t passphrase_len = 0; @@ -326,7 +325,6 @@ qemuMonitorSendDiskPassphrase(qemuMonitorPtr mon, /* Fetch the disk password if possible */ res = qemuMonitorGetDiskSecret(mon, - conn, path, &passphrase, &passphrase_len); @@ -358,14 +356,13 @@ qemuMonitorSendDiskPassphrase(qemuMonitorPtr mon, } int -qemuMonitorTextStartCPUs(qemuMonitorPtr mon, - virConnectPtr conn) +qemuMonitorTextStartCPUs(qemuMonitorPtr mon) { char *reply; if (qemuMonitorTextCommandWithHandler(mon, "cont", qemuMonitorSendDiskPassphrase, - conn, + NULL, -1, &reply) < 0) return -1; diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h index 86f43e7c55..d57bdbc55f 100644 --- a/src/qemu/qemu_monitor_text.h +++ b/src/qemu/qemu_monitor_text.h @@ -39,8 +39,7 @@ int qemuMonitorTextCommandWithFd(qemuMonitorPtr mon, int scm_fd, char **reply); -int qemuMonitorTextStartCPUs(qemuMonitorPtr mon, - virConnectPtr conn); +int qemuMonitorTextStartCPUs(qemuMonitorPtr mon); int qemuMonitorTextStopCPUs(qemuMonitorPtr mon); int qemuMonitorTextGetStatus(qemuMonitorPtr mon, bool *running, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 10211de871..d0a25cecb9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -447,13 +447,13 @@ qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn, static int qemuProcessFindVolumeQcowPassphrase(qemuMonitorPtr mon ATTRIBUTE_UNUSED, - virConnectPtr conn, virDomainObjPtr vm, const char *path, char **secretRet, size_t *secretLen, void *opaque ATTRIBUTE_UNUSED) { + virConnectPtr conn = NULL; virDomainDiskDefPtr disk; int ret = -1; @@ -465,9 +465,11 @@ qemuProcessFindVolumeQcowPassphrase(qemuMonitorPtr mon ATTRIBUTE_UNUSED, goto cleanup; } + conn = virGetConnectSecret(); ret = qemuProcessGetVolumeQcowPassphrase(conn, disk, secretRet, secretLen); cleanup: + virObjectUnref(conn); virObjectUnlock(vm); return ret; } @@ -565,7 +567,7 @@ qemuProcessFakeReboot(void *opaque) if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_CRASHED) reason = VIR_DOMAIN_RUNNING_CRASHED; - if (qemuProcessStartCPUs(driver, vm, NULL, + if (qemuProcessStartCPUs(driver, vm, reason, QEMU_ASYNC_JOB_NONE) < 0) { if (virGetLastError() == NULL) @@ -2854,7 +2856,7 @@ qemuProcessPrepareMonitorChr(virDomainChrSourceDefPtr monConfig, */ int qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm, - virConnectPtr conn, virDomainRunningReason reason, + virDomainRunningReason reason, qemuDomainAsyncJob asyncJob) { int ret = -1; @@ -2879,7 +2881,7 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm, if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) goto release; - ret = qemuMonitorStartCPUs(priv->mon, conn); + ret = qemuMonitorStartCPUs(priv->mon); if (qemuDomainObjExitMonitor(driver, vm) < 0) ret = -1; @@ -3040,7 +3042,6 @@ qemuProcessUpdateState(virQEMUDriverPtr driver, virDomainObjPtr vm) static int qemuProcessRecoverMigrationIn(virQEMUDriverPtr driver, virDomainObjPtr vm, - virConnectPtr conn, qemuMigrationJobPhase phase, virDomainState state, int reason) @@ -3072,7 +3073,7 @@ qemuProcessRecoverMigrationIn(virQEMUDriverPtr driver, * and hope we are all set */ VIR_DEBUG("Incoming migration finished, resuming domain %s", vm->def->name); - if (qemuProcessStartCPUs(driver, vm, conn, + if (qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_UNPAUSED, QEMU_ASYNC_JOB_NONE) < 0) { VIR_WARN("Could not resume domain %s", vm->def->name); @@ -3099,7 +3100,6 @@ qemuProcessRecoverMigrationIn(virQEMUDriverPtr driver, static int qemuProcessRecoverMigrationOut(virQEMUDriverPtr driver, virDomainObjPtr vm, - virConnectPtr conn, qemuMigrationJobPhase phase, virDomainState state, int reason, @@ -3179,7 +3179,7 @@ qemuProcessRecoverMigrationOut(virQEMUDriverPtr driver, if (state == VIR_DOMAIN_PAUSED && (reason == VIR_DOMAIN_PAUSED_MIGRATION || reason == VIR_DOMAIN_PAUSED_UNKNOWN)) { - if (qemuProcessStartCPUs(driver, vm, conn, + if (qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_UNPAUSED, QEMU_ASYNC_JOB_NONE) < 0) { VIR_WARN("Could not resume domain %s", vm->def->name); @@ -3194,7 +3194,6 @@ qemuProcessRecoverMigrationOut(virQEMUDriverPtr driver, static int qemuProcessRecoverJob(virQEMUDriverPtr driver, virDomainObjPtr vm, - virConnectPtr conn, const struct qemuDomainJobObj *job, unsigned int *stopFlags) { @@ -3206,13 +3205,13 @@ qemuProcessRecoverJob(virQEMUDriverPtr driver, switch (job->asyncJob) { case QEMU_ASYNC_JOB_MIGRATION_OUT: - if (qemuProcessRecoverMigrationOut(driver, vm, conn, job->phase, + if (qemuProcessRecoverMigrationOut(driver, vm, job->phase, state, reason, stopFlags) < 0) return -1; break; case QEMU_ASYNC_JOB_MIGRATION_IN: - if (qemuProcessRecoverMigrationIn(driver, vm, conn, job->phase, + if (qemuProcessRecoverMigrationIn(driver, vm, job->phase, state, reason) < 0) return -1; break; @@ -3237,7 +3236,7 @@ qemuProcessRecoverJob(virQEMUDriverPtr driver, (reason == VIR_DOMAIN_PAUSED_SNAPSHOT || reason == VIR_DOMAIN_PAUSED_MIGRATION)) || reason == VIR_DOMAIN_PAUSED_UNKNOWN)) { - if (qemuProcessStartCPUs(driver, vm, conn, + if (qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_UNPAUSED, QEMU_ASYNC_JOB_NONE) < 0) { VIR_WARN("Could not resume domain '%s' after migration to file", @@ -6260,8 +6259,7 @@ qemuProcessRefreshState(virQEMUDriverPtr driver, * Finish starting a new domain. */ int -qemuProcessFinishStartup(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessFinishStartup(virQEMUDriverPtr driver, virDomainObjPtr vm, qemuDomainAsyncJob asyncJob, bool startCPUs, @@ -6272,7 +6270,7 @@ qemuProcessFinishStartup(virConnectPtr conn, if (startCPUs) { VIR_DEBUG("Starting domain CPUs"); - if (qemuProcessStartCPUs(driver, vm, conn, + if (qemuProcessStartCPUs(driver, vm, VIR_DOMAIN_RUNNING_BOOTED, asyncJob) < 0) { if (!virGetLastError()) @@ -6366,7 +6364,7 @@ qemuProcessStart(virConnectPtr conn, qemuMigrationRunIncoming(driver, vm, incoming->deferredURI, asyncJob) < 0) goto stop; - if (qemuProcessFinishStartup(conn, driver, vm, asyncJob, + if (qemuProcessFinishStartup(driver, vm, asyncJob, !(flags & VIR_QEMU_PROCESS_START_PAUSED), incoming ? VIR_DOMAIN_PAUSED_MIGRATION : @@ -7470,7 +7468,7 @@ qemuProcessReconnect(void *opaque) if (qemuProcessRefreshBalloonState(driver, obj, QEMU_ASYNC_JOB_NONE) < 0) goto error; - if (qemuProcessRecoverJob(driver, obj, conn, &oldjob, &stopFlags) < 0) + if (qemuProcessRecoverJob(driver, obj, &oldjob, &stopFlags) < 0) goto error; if (qemuProcessUpdateDevices(driver, obj) < 0) diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index 8d210282f8..42f92eb458 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -30,7 +30,6 @@ int qemuProcessPrepareMonitorChr(virDomainChrSourceDefPtr monConfig, int qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm, - virConnectPtr conn, virDomainRunningReason reason, qemuDomainAsyncJob asyncJob); int qemuProcessStopCPUs(virQEMUDriverPtr driver, @@ -126,8 +125,7 @@ int qemuProcessLaunch(virConnectPtr conn, virNetDevVPortProfileOp vmop, unsigned int flags); -int qemuProcessFinishStartup(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuProcessFinishStartup(virQEMUDriverPtr driver, virDomainObjPtr vm, qemuDomainAsyncJob asyncJob, bool startCPUs, diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c index 1eeefbce9b..908ec3a3c8 100644 --- a/tests/qemumonitorjsontest.c +++ b/tests/qemumonitorjsontest.c @@ -1238,7 +1238,7 @@ testQemuMonitorJSONCPU(const void *data) goto cleanup; } - if (qemuMonitorJSONStartCPUs(qemuMonitorTestGetMonitor(test), NULL) < 0) + if (qemuMonitorJSONStartCPUs(qemuMonitorTestGetMonitor(test)) < 0) goto cleanup; if (qemuMonitorGetStatus(qemuMonitorTestGetMonitor(test), -- 2.14.3

On 02/09/2018 12:24 PM, Daniel P. Berrangé wrote:
There is a long standing hack to pass a virConnectPtr into the qemuMonitorStartCPUs method, so that when the text monitor prompts for a disk password, we can lookup virSecretPtr objects. This causes us to have to pass a virConnectPtr around through countless methods up the call chain....except some places don't have any virConnectPtr available so have always just passed NULL. We can finally fix this disasterous design by using virGetConnectSecret() to open a connection
disastrous according to my email client's spell checker.
to the secret driver at time of use.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_driver.c | 32 +++++++++++++++----------------- src/qemu/qemu_migration.c | 6 +++--- src/qemu/qemu_monitor.c | 10 ++++------ src/qemu/qemu_monitor.h | 11 +---------- src/qemu/qemu_monitor_json.c | 3 +-- src/qemu/qemu_monitor_json.h | 3 +-- src/qemu/qemu_monitor_text.c | 9 +++------ src/qemu/qemu_monitor_text.h | 3 +-- src/qemu/qemu_process.c | 32 +++++++++++++++----------------- src/qemu/qemu_process.h | 4 +--- tests/qemumonitorjsontest.c | 2 +- 11 files changed, 46 insertions(+), 69 deletions(-)
Reviewed-by: John Ferlan <jferlan@redhat.com> John

Rather than expecting callers to pass a virConnectPtr into the virDomainDiskTranslateSourcePool() method, just acquire a connection to the storage driver when needed. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/conf/domain_conf.c | 10 +++++++--- src/conf/domain_conf.h | 3 +-- src/qemu/qemu_conf.c | 3 +-- src/qemu/qemu_conf.h | 3 +-- src/qemu/qemu_driver.c | 39 ++++++++++++++++----------------------- src/qemu/qemu_hotplug.c | 2 +- src/qemu/qemu_process.c | 4 ++-- 7 files changed, 29 insertions(+), 35 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 4f50547580..613e34f8c4 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -29068,9 +29068,9 @@ virDomainDiskTranslateSourcePoolAuth(virDomainDiskDefPtr def, int -virDomainDiskTranslateSourcePool(virConnectPtr conn, - virDomainDiskDefPtr def) +virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def) { + virConnectPtr conn = NULL; virStoragePoolDefPtr pooldef = NULL; virStoragePoolPtr pool = NULL; virStorageVolPtr vol = NULL; @@ -29084,9 +29084,12 @@ virDomainDiskTranslateSourcePool(virConnectPtr conn, if (!def->src->srcpool) return 0; - if (!(pool = virStoragePoolLookupByName(conn, def->src->srcpool->pool))) + if (!(conn = virGetConnectStorage())) return -1; + if (!(pool = virStoragePoolLookupByName(conn, def->src->srcpool->pool))) + goto cleanup; + if (virStoragePoolIsActive(pool) != 1) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("storage pool '%s' containing volume '%s' " @@ -29230,6 +29233,7 @@ virDomainDiskTranslateSourcePool(virConnectPtr conn, ret = 0; cleanup: + virObjectUnref(conn); virObjectUnref(pool); virObjectUnref(vol); VIR_FREE(poolxml); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 7b450ce8f1..8be08bc9b3 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3514,8 +3514,7 @@ virDomainNetResolveActualType(virDomainNetDefPtr iface) ATTRIBUTE_NONNULL(1); -int virDomainDiskTranslateSourcePool(virConnectPtr conn, - virDomainDiskDefPtr def); +int virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def); #endif /* __DOMAIN_CONF_H */ diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 2fa96431fa..b1ee36efea 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1635,8 +1635,7 @@ int qemuDriverAllocateID(virQEMUDriverPtr driver) int -qemuTranslateSnapshotDiskSourcePool(virConnectPtr conn ATTRIBUTE_UNUSED, - virDomainSnapshotDiskDefPtr def) +qemuTranslateSnapshotDiskSourcePool(virDomainSnapshotDiskDefPtr def) { if (def->src->type != VIR_STORAGE_TYPE_VOLUME) return 0; diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index 3f38a76c26..947e52dfe2 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -352,8 +352,7 @@ int qemuSetUnprivSGIO(virDomainDeviceDefPtr dev); int qemuDriverAllocateID(virQEMUDriverPtr driver); virDomainXMLOptionPtr virQEMUDriverCreateXMLConf(virQEMUDriverPtr driver); -int qemuTranslateSnapshotDiskSourcePool(virConnectPtr conn, - virDomainSnapshotDiskDefPtr def); +int qemuTranslateSnapshotDiskSourcePool(virDomainSnapshotDiskDefPtr def); char * qemuGetBaseHugepagePath(virHugeTLBFSPtr hugepage); char * qemuGetDomainHugepagePath(const virDomainDef *def, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0aa0f05d3c..6eec6d282c 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7871,8 +7871,7 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm, } static int -qemuDomainChangeDiskLive(virConnectPtr conn, - virDomainObjPtr vm, +qemuDomainChangeDiskLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev, virQEMUDriverPtr driver, bool force) @@ -7881,7 +7880,7 @@ qemuDomainChangeDiskLive(virConnectPtr conn, virDomainDiskDefPtr orig_disk = NULL; int ret = -1; - if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) goto cleanup; if (qemuDomainDetermineDiskChain(driver, vm, disk, false, true) < 0) @@ -7932,8 +7931,7 @@ qemuDomainChangeDiskLive(virConnectPtr conn, } static int -qemuDomainUpdateDeviceLive(virConnectPtr conn, - virDomainObjPtr vm, +qemuDomainUpdateDeviceLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev, virDomainPtr dom, bool force) @@ -7944,7 +7942,7 @@ qemuDomainUpdateDeviceLive(virConnectPtr conn, switch ((virDomainDeviceType) dev->type) { case VIR_DOMAIN_DEVICE_DISK: qemuDomainObjCheckDiskTaint(driver, vm, dev->data.disk, NULL); - ret = qemuDomainChangeDiskLive(conn, vm, dev, driver, force); + ret = qemuDomainChangeDiskLive(vm, dev, driver, force); break; case VIR_DOMAIN_DEVICE_GRAPHICS: ret = qemuDomainChangeGraphics(driver, vm, dev->data.graphics); @@ -7986,7 +7984,6 @@ qemuDomainUpdateDeviceLive(virConnectPtr conn, static int qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, virDomainDeviceDefPtr dev, - virConnectPtr conn, virCapsPtr caps, unsigned int parse_flags, virDomainXMLOptionPtr xmlopt) @@ -8008,7 +8005,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, _("target %s already exists"), disk->dst); return -1; } - if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) return -1; if (qemuCheckDiskConfig(disk, NULL) < 0) return -1; @@ -8494,7 +8491,7 @@ qemuDomainAttachDeviceLiveAndConfig(virConnectPtr conn, if (virDomainDefCompatibleDevice(vmdef, dev) < 0) goto cleanup; - if ((ret = qemuDomainAttachDeviceConfig(vmdef, dev, conn, caps, + if ((ret = qemuDomainAttachDeviceConfig(vmdef, dev, caps, parse_flags, driver->xmlopt)) < 0) goto cleanup; @@ -8654,7 +8651,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, if (virDomainDefCompatibleDevice(vm->def, dev_copy) < 0) goto endjob; - if ((ret = qemuDomainUpdateDeviceLive(dom->conn, vm, dev_copy, dom, force)) < 0) + if ((ret = qemuDomainUpdateDeviceLive(vm, dev_copy, dom, force)) < 0) goto endjob; /* * update domain status forcibly because the domain status may be @@ -14229,8 +14226,7 @@ qemuDomainSnapshotPrepareDiskExternalActive(virDomainSnapshotDiskDefPtr snapdisk static int -qemuDomainSnapshotPrepareDiskExternal(virConnectPtr conn, - virDomainDiskDefPtr disk, +qemuDomainSnapshotPrepareDiskExternal(virDomainDiskDefPtr disk, virDomainSnapshotDiskDefPtr snapdisk, bool active, bool reuse) @@ -14238,11 +14234,11 @@ qemuDomainSnapshotPrepareDiskExternal(virConnectPtr conn, int ret = -1; struct stat st; - if (qemuTranslateSnapshotDiskSourcePool(conn, snapdisk) < 0) + if (qemuTranslateSnapshotDiskSourcePool(snapdisk) < 0) return -1; if (!active) { - if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) return -1; if (qemuDomainSnapshotPrepareDiskExternalInactive(snapdisk, disk) < 0) @@ -14284,8 +14280,7 @@ qemuDomainSnapshotPrepareDiskExternal(virConnectPtr conn, static int -qemuDomainSnapshotPrepareDiskInternal(virConnectPtr conn, - virDomainDiskDefPtr disk, +qemuDomainSnapshotPrepareDiskInternal(virDomainDiskDefPtr disk, bool active) { int actualType; @@ -14294,7 +14289,7 @@ qemuDomainSnapshotPrepareDiskInternal(virConnectPtr conn, if (active) return 0; - if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) return -1; actualType = virStorageSourceGetActualType(disk->src); @@ -14343,8 +14338,7 @@ qemuDomainSnapshotPrepareDiskInternal(virConnectPtr conn, static int -qemuDomainSnapshotPrepare(virConnectPtr conn, - virDomainObjPtr vm, +qemuDomainSnapshotPrepare(virDomainObjPtr vm, virDomainSnapshotDefPtr def, unsigned int *flags) { @@ -14385,7 +14379,7 @@ qemuDomainSnapshotPrepare(virConnectPtr conn, goto cleanup; } - if (qemuDomainSnapshotPrepareDiskInternal(conn, dom_disk, + if (qemuDomainSnapshotPrepareDiskInternal(dom_disk, active) < 0) goto cleanup; @@ -14414,7 +14408,7 @@ qemuDomainSnapshotPrepare(virConnectPtr conn, goto cleanup; } - if (qemuDomainSnapshotPrepareDiskExternal(conn, dom_disk, disk, + if (qemuDomainSnapshotPrepareDiskExternal(dom_disk, disk, active, reuse) < 0) goto cleanup; @@ -15062,7 +15056,6 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, const char *xmlDesc, unsigned int flags) { - virConnectPtr conn = domain->conn; virQEMUDriverPtr driver = domain->conn->privateData; virDomainObjPtr vm = NULL; char *xml = NULL; @@ -15241,7 +15234,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, } if (virDomainSnapshotAlignDisks(def, align_location, align_match) < 0 || - qemuDomainSnapshotPrepare(conn, vm, def, &flags) < 0) + qemuDomainSnapshotPrepare(vm, def, &flags) < 0) goto endjob; } diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index c7bf25eeef..a2268be576 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -713,7 +713,7 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn, goto cleanup; } - if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) goto cleanup; if (qemuAddSharedDevice(driver, dev, vm->def->name) < 0) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index d0a25cecb9..586d11bba3 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5603,7 +5603,7 @@ qemuProcessPrepareDomainStorage(virConnectPtr conn, size_t idx = i - 1; virDomainDiskDefPtr disk = vm->def->disks[idx]; - if (virDomainDiskTranslateSourcePool(conn, disk) < 0) { + if (virDomainDiskTranslateSourcePool(disk) < 0) { if (qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) < 0) return -1; @@ -7362,7 +7362,7 @@ qemuProcessReconnect(void *opaque) virDomainDiskDefPtr disk = obj->def->disks[i]; virDomainDeviceDef dev; - if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) goto error; /* backing chains need to be refreshed only if they could change */ -- 2.14.3

On 02/09/2018 12:24 PM, Daniel P. Berrangé wrote:
Rather than expecting callers to pass a virConnectPtr into the virDomainDiskTranslateSourcePool() method, just acquire a connection to the storage driver when needed.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/conf/domain_conf.c | 10 +++++++--- src/conf/domain_conf.h | 3 +-- src/qemu/qemu_conf.c | 3 +-- src/qemu/qemu_conf.h | 3 +-- src/qemu/qemu_driver.c | 39 ++++++++++++++++----------------------- src/qemu/qemu_hotplug.c | 2 +- src/qemu/qemu_process.c | 4 ++-- 7 files changed, 29 insertions(+), 35 deletions(-)
qemuxml2argvtest fails with this patch (turned on VIR_TEST_DEBUG=1) 171) QEMU XML-2-ARGV disk-source-pool ... libvirt: XML-RPC error : Failed to connect socket to '/run/user/1000/libvirt/libvirt-sock': No such file or directory libvirt: XML-RPC error : Failed to connect socket to '/run/user/1000/libvirt/libvirt-sock': No such file or directory FAILED 172) QEMU XML-2-ARGV disk-source-pool-mode ... libvirt: XML-RPC error : Failed to connect socket to '/run/user/1000/libvirt/libvirt-sock': No such file or directory libvirt: XML-RPC error : Failed to connect socket to '/run/user/1000/libvirt/libvirt-sock': No such file or directory FAILED ... 428) QEMU XML-2-ARGV luks-disks-source ... libvirt: XML-RPC error : Failed to connect socket to '/run/user/1000/libvirt/libvirt-sock': No such file or directory libvirt: XML-RPC error : Failed to connect socket to '/run/user/1000/libvirt/libvirt-sock': No such file or directory FAILED Turning on LIBVIRT_DEBUG=1 finds: 2018-02-13 17:16:05.206+0000: 24834: debug : virConnectOpenInternal:1033 : Split "storage:///session" to URI components: scheme storage server <null> user <null> port -1 path /session It seems the test driver will need some updating... I wonder if perhaps these were missed because you had disabled qemuxml2argvtest for a bit, but now that it's back... John
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 4f50547580..613e34f8c4 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -29068,9 +29068,9 @@ virDomainDiskTranslateSourcePoolAuth(virDomainDiskDefPtr def,
int -virDomainDiskTranslateSourcePool(virConnectPtr conn, - virDomainDiskDefPtr def) +virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def) { + virConnectPtr conn = NULL; virStoragePoolDefPtr pooldef = NULL; virStoragePoolPtr pool = NULL; virStorageVolPtr vol = NULL; @@ -29084,9 +29084,12 @@ virDomainDiskTranslateSourcePool(virConnectPtr conn, if (!def->src->srcpool) return 0;
- if (!(pool = virStoragePoolLookupByName(conn, def->src->srcpool->pool))) + if (!(conn = virGetConnectStorage())) return -1;
+ if (!(pool = virStoragePoolLookupByName(conn, def->src->srcpool->pool))) + goto cleanup; + if (virStoragePoolIsActive(pool) != 1) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("storage pool '%s' containing volume '%s' " @@ -29230,6 +29233,7 @@ virDomainDiskTranslateSourcePool(virConnectPtr conn,
ret = 0; cleanup: + virObjectUnref(conn); virObjectUnref(pool); virObjectUnref(vol); VIR_FREE(poolxml); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 7b450ce8f1..8be08bc9b3 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3514,8 +3514,7 @@ virDomainNetResolveActualType(virDomainNetDefPtr iface) ATTRIBUTE_NONNULL(1);
-int virDomainDiskTranslateSourcePool(virConnectPtr conn, - virDomainDiskDefPtr def); +int virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def);
#endif /* __DOMAIN_CONF_H */ diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 2fa96431fa..b1ee36efea 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -1635,8 +1635,7 @@ int qemuDriverAllocateID(virQEMUDriverPtr driver)
int -qemuTranslateSnapshotDiskSourcePool(virConnectPtr conn ATTRIBUTE_UNUSED, - virDomainSnapshotDiskDefPtr def) +qemuTranslateSnapshotDiskSourcePool(virDomainSnapshotDiskDefPtr def) { if (def->src->type != VIR_STORAGE_TYPE_VOLUME) return 0; diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index 3f38a76c26..947e52dfe2 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -352,8 +352,7 @@ int qemuSetUnprivSGIO(virDomainDeviceDefPtr dev); int qemuDriverAllocateID(virQEMUDriverPtr driver); virDomainXMLOptionPtr virQEMUDriverCreateXMLConf(virQEMUDriverPtr driver);
-int qemuTranslateSnapshotDiskSourcePool(virConnectPtr conn, - virDomainSnapshotDiskDefPtr def); +int qemuTranslateSnapshotDiskSourcePool(virDomainSnapshotDiskDefPtr def);
char * qemuGetBaseHugepagePath(virHugeTLBFSPtr hugepage); char * qemuGetDomainHugepagePath(const virDomainDef *def, diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 0aa0f05d3c..6eec6d282c 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7871,8 +7871,7 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm, }
static int -qemuDomainChangeDiskLive(virConnectPtr conn, - virDomainObjPtr vm, +qemuDomainChangeDiskLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev, virQEMUDriverPtr driver, bool force) @@ -7881,7 +7880,7 @@ qemuDomainChangeDiskLive(virConnectPtr conn, virDomainDiskDefPtr orig_disk = NULL; int ret = -1;
- if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) goto cleanup;
if (qemuDomainDetermineDiskChain(driver, vm, disk, false, true) < 0) @@ -7932,8 +7931,7 @@ qemuDomainChangeDiskLive(virConnectPtr conn, }
static int -qemuDomainUpdateDeviceLive(virConnectPtr conn, - virDomainObjPtr vm, +qemuDomainUpdateDeviceLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev, virDomainPtr dom, bool force) @@ -7944,7 +7942,7 @@ qemuDomainUpdateDeviceLive(virConnectPtr conn, switch ((virDomainDeviceType) dev->type) { case VIR_DOMAIN_DEVICE_DISK: qemuDomainObjCheckDiskTaint(driver, vm, dev->data.disk, NULL); - ret = qemuDomainChangeDiskLive(conn, vm, dev, driver, force); + ret = qemuDomainChangeDiskLive(vm, dev, driver, force); break; case VIR_DOMAIN_DEVICE_GRAPHICS: ret = qemuDomainChangeGraphics(driver, vm, dev->data.graphics); @@ -7986,7 +7984,6 @@ qemuDomainUpdateDeviceLive(virConnectPtr conn, static int qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, virDomainDeviceDefPtr dev, - virConnectPtr conn, virCapsPtr caps, unsigned int parse_flags, virDomainXMLOptionPtr xmlopt) @@ -8008,7 +8005,7 @@ qemuDomainAttachDeviceConfig(virDomainDefPtr vmdef, _("target %s already exists"), disk->dst); return -1; } - if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) return -1; if (qemuCheckDiskConfig(disk, NULL) < 0) return -1; @@ -8494,7 +8491,7 @@ qemuDomainAttachDeviceLiveAndConfig(virConnectPtr conn,
if (virDomainDefCompatibleDevice(vmdef, dev) < 0) goto cleanup; - if ((ret = qemuDomainAttachDeviceConfig(vmdef, dev, conn, caps, + if ((ret = qemuDomainAttachDeviceConfig(vmdef, dev, caps, parse_flags, driver->xmlopt)) < 0) goto cleanup; @@ -8654,7 +8651,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, if (virDomainDefCompatibleDevice(vm->def, dev_copy) < 0) goto endjob;
- if ((ret = qemuDomainUpdateDeviceLive(dom->conn, vm, dev_copy, dom, force)) < 0) + if ((ret = qemuDomainUpdateDeviceLive(vm, dev_copy, dom, force)) < 0) goto endjob; /* * update domain status forcibly because the domain status may be @@ -14229,8 +14226,7 @@ qemuDomainSnapshotPrepareDiskExternalActive(virDomainSnapshotDiskDefPtr snapdisk
static int -qemuDomainSnapshotPrepareDiskExternal(virConnectPtr conn, - virDomainDiskDefPtr disk, +qemuDomainSnapshotPrepareDiskExternal(virDomainDiskDefPtr disk, virDomainSnapshotDiskDefPtr snapdisk, bool active, bool reuse) @@ -14238,11 +14234,11 @@ qemuDomainSnapshotPrepareDiskExternal(virConnectPtr conn, int ret = -1; struct stat st;
- if (qemuTranslateSnapshotDiskSourcePool(conn, snapdisk) < 0) + if (qemuTranslateSnapshotDiskSourcePool(snapdisk) < 0) return -1;
if (!active) { - if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) return -1;
if (qemuDomainSnapshotPrepareDiskExternalInactive(snapdisk, disk) < 0) @@ -14284,8 +14280,7 @@ qemuDomainSnapshotPrepareDiskExternal(virConnectPtr conn,
static int -qemuDomainSnapshotPrepareDiskInternal(virConnectPtr conn, - virDomainDiskDefPtr disk, +qemuDomainSnapshotPrepareDiskInternal(virDomainDiskDefPtr disk, bool active) { int actualType; @@ -14294,7 +14289,7 @@ qemuDomainSnapshotPrepareDiskInternal(virConnectPtr conn, if (active) return 0;
- if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) return -1;
actualType = virStorageSourceGetActualType(disk->src); @@ -14343,8 +14338,7 @@ qemuDomainSnapshotPrepareDiskInternal(virConnectPtr conn,
static int -qemuDomainSnapshotPrepare(virConnectPtr conn, - virDomainObjPtr vm, +qemuDomainSnapshotPrepare(virDomainObjPtr vm, virDomainSnapshotDefPtr def, unsigned int *flags) { @@ -14385,7 +14379,7 @@ qemuDomainSnapshotPrepare(virConnectPtr conn, goto cleanup; }
- if (qemuDomainSnapshotPrepareDiskInternal(conn, dom_disk, + if (qemuDomainSnapshotPrepareDiskInternal(dom_disk, active) < 0) goto cleanup;
@@ -14414,7 +14408,7 @@ qemuDomainSnapshotPrepare(virConnectPtr conn, goto cleanup; }
- if (qemuDomainSnapshotPrepareDiskExternal(conn, dom_disk, disk, + if (qemuDomainSnapshotPrepareDiskExternal(dom_disk, disk, active, reuse) < 0) goto cleanup;
@@ -15062,7 +15056,6 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, const char *xmlDesc, unsigned int flags) { - virConnectPtr conn = domain->conn; virQEMUDriverPtr driver = domain->conn->privateData; virDomainObjPtr vm = NULL; char *xml = NULL; @@ -15241,7 +15234,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain, } if (virDomainSnapshotAlignDisks(def, align_location, align_match) < 0 || - qemuDomainSnapshotPrepare(conn, vm, def, &flags) < 0) + qemuDomainSnapshotPrepare(vm, def, &flags) < 0) goto endjob; }
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index c7bf25eeef..a2268be576 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -713,7 +713,7 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn, goto cleanup; }
- if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) goto cleanup;
if (qemuAddSharedDevice(driver, dev, vm->def->name) < 0) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index d0a25cecb9..586d11bba3 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -5603,7 +5603,7 @@ qemuProcessPrepareDomainStorage(virConnectPtr conn, size_t idx = i - 1; virDomainDiskDefPtr disk = vm->def->disks[idx];
- if (virDomainDiskTranslateSourcePool(conn, disk) < 0) { + if (virDomainDiskTranslateSourcePool(disk) < 0) { if (qemuDomainCheckDiskStartupPolicy(driver, vm, idx, cold_boot) < 0) return -1;
@@ -7362,7 +7362,7 @@ qemuProcessReconnect(void *opaque) virDomainDiskDefPtr disk = obj->def->disks[i]; virDomainDeviceDef dev;
- if (virDomainDiskTranslateSourcePool(conn, disk) < 0) + if (virDomainDiskTranslateSourcePool(disk) < 0) goto error;
/* backing chains need to be refreshed only if they could change */

On Tue, Feb 13, 2018 at 12:34:54PM -0500, John Ferlan wrote:
On 02/09/2018 12:24 PM, Daniel P. Berrangé wrote:
Rather than expecting callers to pass a virConnectPtr into the virDomainDiskTranslateSourcePool() method, just acquire a connection to the storage driver when needed.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/conf/domain_conf.c | 10 +++++++--- src/conf/domain_conf.h | 3 +-- src/qemu/qemu_conf.c | 3 +-- src/qemu/qemu_conf.h | 3 +-- src/qemu/qemu_driver.c | 39 ++++++++++++++++----------------------- src/qemu/qemu_hotplug.c | 2 +- src/qemu/qemu_process.c | 4 ++-- 7 files changed, 29 insertions(+), 35 deletions(-)
qemuxml2argvtest fails with this patch (turned on VIR_TEST_DEBUG=1)
Yeah, I noticed this since posting and am working on a solution to stop us trying to open the real libvirtd connection. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

During domain startup there are many places where we need to acquire secrets. Currently code passes around a virConnectPtr, except in the places where we pass in NULL. So there are a few codepaths where ability to start guests using secrets will fail. Change to acquire a handle to the secret driver when needed. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_domain.c | 111 ++++++++++++++++++++++------------------------ src/qemu/qemu_domain.h | 15 +++---- src/qemu/qemu_driver.c | 18 ++++---- src/qemu/qemu_hotplug.c | 64 +++++++++++--------------- src/qemu/qemu_hotplug.h | 15 +++---- src/qemu/qemu_migration.c | 10 ++--- src/qemu/qemu_process.c | 40 +++++------------ tests/qemuhotplugtest.c | 4 +- 8 files changed, 114 insertions(+), 163 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 84207db16a..27063873a4 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1151,7 +1151,6 @@ qemuDomainChrSourcePrivateDispose(void *obj) /* qemuDomainSecretPlainSetup: - * @conn: Pointer to connection * @secinfo: Pointer to secret info * @usageType: The virSecretUsageType * @username: username to use for authentication (may be NULL) @@ -1162,24 +1161,33 @@ qemuDomainChrSourcePrivateDispose(void *obj) * Returns 0 on success, -1 on failure with error message */ static int -qemuDomainSecretPlainSetup(virConnectPtr conn, - qemuDomainSecretInfoPtr secinfo, +qemuDomainSecretPlainSetup(qemuDomainSecretInfoPtr secinfo, virSecretUsageType usageType, const char *username, virSecretLookupTypeDefPtr seclookupdef) { + virConnectPtr conn; + int ret = -1; + + conn = virGetConnectSecret(); + if (!conn) + return -1; + secinfo->type = VIR_DOMAIN_SECRET_INFO_TYPE_PLAIN; if (VIR_STRDUP(secinfo->s.plain.username, username) < 0) - return -1; + goto cleanup; - return virSecretGetSecretString(conn, seclookupdef, usageType, - &secinfo->s.plain.secret, - &secinfo->s.plain.secretlen); + ret = virSecretGetSecretString(conn, seclookupdef, usageType, + &secinfo->s.plain.secret, + &secinfo->s.plain.secretlen); + + cleanup: + virObjectUnref(conn); + return ret; } /* qemuDomainSecretAESSetup: - * @conn: Pointer to connection * @priv: pointer to domain private object * @secinfo: Pointer to secret info * @srcalias: Alias of the disk/hostdev used to generate the secret alias @@ -1193,8 +1201,7 @@ qemuDomainSecretPlainSetup(virConnectPtr conn, * Returns 0 on success, -1 on failure with error message */ static int -qemuDomainSecretAESSetup(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv, qemuDomainSecretInfoPtr secinfo, const char *srcalias, virSecretUsageType usageType, @@ -1202,6 +1209,7 @@ qemuDomainSecretAESSetup(virConnectPtr conn, virSecretLookupTypeDefPtr seclookupdef, bool isLuks) { + virConnectPtr conn; int ret = -1; uint8_t *raw_iv = NULL; size_t ivlen = QEMU_DOMAIN_AES_IV_LEN; @@ -1210,16 +1218,20 @@ qemuDomainSecretAESSetup(virConnectPtr conn, uint8_t *ciphertext = NULL; size_t ciphertextlen = 0; + conn = virGetConnectSecret(); + if (!conn) + return -1; + secinfo->type = VIR_DOMAIN_SECRET_INFO_TYPE_AES; if (VIR_STRDUP(secinfo->s.aes.username, username) < 0) - return -1; + goto cleanup; if (!(secinfo->s.aes.alias = qemuDomainGetSecretAESAlias(srcalias, isLuks))) - return -1; + goto cleanup; /* Create a random initialization vector */ if (!(raw_iv = virCryptoGenerateRandom(ivlen))) - return -1; + goto cleanup; /* Encode the IV and save that since qemu will need it */ if (!(secinfo->s.aes.iv = virStringEncodeBase64(raw_iv, ivlen))) @@ -1250,13 +1262,12 @@ qemuDomainSecretAESSetup(virConnectPtr conn, VIR_DISPOSE_N(raw_iv, ivlen); VIR_DISPOSE_N(secret, secretlen); VIR_DISPOSE_N(ciphertext, ciphertextlen); - + virObjectUnref(conn); return ret; } /* qemuDomainSecretSetup: - * @conn: Pointer to connection * @priv: pointer to domain private object * @secinfo: Pointer to secret info * @srcalias: Alias of the disk/hostdev used to generate the secret alias @@ -1273,8 +1284,7 @@ qemuDomainSecretAESSetup(virConnectPtr conn, * Returns 0 on success, -1 on failure */ static int -qemuDomainSecretSetup(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretSetup(qemuDomainObjPrivatePtr priv, qemuDomainSecretInfoPtr secinfo, const char *srcalias, virSecretUsageType usageType, @@ -1291,12 +1301,12 @@ qemuDomainSecretSetup(virConnectPtr conn, (usageType == VIR_SECRET_USAGE_TYPE_ISCSI && iscsiHasPS) || usageType == VIR_SECRET_USAGE_TYPE_VOLUME || usageType == VIR_SECRET_USAGE_TYPE_TLS)) { - if (qemuDomainSecretAESSetup(conn, priv, secinfo, srcalias, + if (qemuDomainSecretAESSetup(priv, secinfo, srcalias, usageType, username, seclookupdef, isLuks) < 0) return -1; } else { - if (qemuDomainSecretPlainSetup(conn, secinfo, usageType, + if (qemuDomainSecretPlainSetup(secinfo, usageType, username, seclookupdef) < 0) return -1; } @@ -1305,7 +1315,6 @@ qemuDomainSecretSetup(virConnectPtr conn, /* qemuDomainSecretInfoNew: - * @conn: Pointer to connection * @priv: pointer to domain private object * @srcAlias: Alias base to use for TLS object * @usageType: Secret usage type @@ -1319,8 +1328,7 @@ qemuDomainSecretSetup(virConnectPtr conn, * to eventually free @secinfo. */ static qemuDomainSecretInfoPtr -qemuDomainSecretInfoNew(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretInfoNew(qemuDomainObjPrivatePtr priv, const char *srcAlias, virSecretUsageType usageType, const char *username, @@ -1332,7 +1340,7 @@ qemuDomainSecretInfoNew(virConnectPtr conn, if (VIR_ALLOC(secinfo) < 0) return NULL; - if (qemuDomainSecretSetup(conn, priv, secinfo, srcAlias, usageType, + if (qemuDomainSecretSetup(priv, secinfo, srcAlias, usageType, username, lookupDef, isLuks) < 0) goto error; @@ -1352,7 +1360,6 @@ qemuDomainSecretInfoNew(virConnectPtr conn, /** * qemuDomainSecretInfoTLSNew: - * @conn: Pointer to connection * @priv: pointer to domain private object * @srcAlias: Alias base to use for TLS object * @secretUUID: Provide a secretUUID value to look up/create the secretInfo @@ -1363,8 +1370,7 @@ qemuDomainSecretInfoNew(virConnectPtr conn, * Returns qemuDomainSecretInfoPtr or NULL on error. */ qemuDomainSecretInfoPtr -qemuDomainSecretInfoTLSNew(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretInfoTLSNew(qemuDomainObjPrivatePtr priv, const char *srcAlias, const char *secretUUID) { @@ -1378,7 +1384,7 @@ qemuDomainSecretInfoTLSNew(virConnectPtr conn, } seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID; - return qemuDomainSecretInfoNew(conn, priv, srcAlias, + return qemuDomainSecretInfoNew(priv, srcAlias, VIR_SECRET_USAGE_TYPE_TLS, NULL, &seclookupdef, false); } @@ -1440,7 +1446,6 @@ qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src) /** * qemuDomainSecretStorageSourcePrepare: - * @conn: connection object - for secret lookup * @priv: domain private object * @src: storage source struct to setup * @authalias: prefix of the alias for secret holding authentication data @@ -1454,8 +1459,7 @@ qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src) * Returns 0 on success; -1 on error while reporting an libvirt error. */ static int -qemuDomainSecretStorageSourcePrepare(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv, virStorageSourcePtr src, const char *authalias, const char *encalias) @@ -1479,7 +1483,7 @@ qemuDomainSecretStorageSourcePrepare(virConnectPtr conn, usageType = VIR_SECRET_USAGE_TYPE_CEPH; if (!(srcPriv->secinfo = - qemuDomainSecretInfoNew(conn, priv, authalias, + qemuDomainSecretInfoNew(priv, authalias, usageType, src->auth->username, &src->auth->seclookupdef, false))) return -1; @@ -1487,7 +1491,7 @@ qemuDomainSecretStorageSourcePrepare(virConnectPtr conn, if (hasEnc) { if (!(srcPriv->encinfo = - qemuDomainSecretInfoNew(conn, priv, encalias, + qemuDomainSecretInfoNew(priv, encalias, VIR_SECRET_USAGE_TYPE_VOLUME, NULL, &src->encryption->secrets[0]->seclookupdef, true))) @@ -1499,7 +1503,6 @@ qemuDomainSecretStorageSourcePrepare(virConnectPtr conn, /* qemuDomainSecretDiskPrepare: - * @conn: Pointer to connection * @priv: pointer to domain private object * @disk: Pointer to a disk definition * @@ -1509,11 +1512,10 @@ qemuDomainSecretStorageSourcePrepare(virConnectPtr conn, */ static int -qemuDomainSecretDiskPrepare(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretDiskPrepare(qemuDomainObjPrivatePtr priv, virDomainDiskDefPtr disk) { - return qemuDomainSecretStorageSourcePrepare(conn, priv, disk->src, + return qemuDomainSecretStorageSourcePrepare(priv, disk->src, disk->info.alias, disk->info.alias); } @@ -1543,7 +1545,6 @@ qemuDomainSecretHostdevDestroy(virDomainHostdevDefPtr hostdev) /* qemuDomainSecretHostdevPrepare: - * @conn: Pointer to connection * @priv: pointer to domain private object * @hostdev: Pointer to a hostdev definition * @@ -1552,8 +1553,7 @@ qemuDomainSecretHostdevDestroy(virDomainHostdevDefPtr hostdev) * Returns 0 on success, -1 on failure */ int -qemuDomainSecretHostdevPrepare(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretHostdevPrepare(qemuDomainObjPrivatePtr priv, virDomainHostdevDefPtr hostdev) { if (virHostdevIsSCSIDevice(hostdev)) { @@ -1571,7 +1571,7 @@ qemuDomainSecretHostdevPrepare(virConnectPtr conn, srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src); if (!(srcPriv->secinfo = - qemuDomainSecretInfoNew(conn, priv, hostdev->info->alias, + qemuDomainSecretInfoNew(priv, hostdev->info->alias, VIR_SECRET_USAGE_TYPE_ISCSI, src->auth->username, &src->auth->seclookupdef, @@ -1603,7 +1603,6 @@ qemuDomainSecretChardevDestroy(virDomainChrSourceDefPtr dev) /* qemuDomainSecretChardevPrepare: - * @conn: Pointer to connection * @cfg: Pointer to driver config object * @priv: pointer to domain private object * @chrAlias: Alias of the chr device @@ -1615,8 +1614,7 @@ qemuDomainSecretChardevDestroy(virDomainChrSourceDefPtr dev) * Returns 0 on success, -1 on failure */ int -qemuDomainSecretChardevPrepare(virConnectPtr conn, - virQEMUDriverConfigPtr cfg, +qemuDomainSecretChardevPrepare(virQEMUDriverConfigPtr cfg, qemuDomainObjPrivatePtr priv, const char *chrAlias, virDomainChrSourceDefPtr dev) @@ -1635,7 +1633,7 @@ qemuDomainSecretChardevPrepare(virConnectPtr conn, return -1; chrSourcePriv->secinfo = - qemuDomainSecretInfoTLSNew(conn, priv, charAlias, + qemuDomainSecretInfoTLSNew(priv, charAlias, cfg->chardevTLSx509secretUUID); VIR_FREE(charAlias); @@ -1693,7 +1691,6 @@ qemuDomainSecretDestroy(virDomainObjPtr vm) /* qemuDomainSecretPrepare: - * @conn: Pointer to connection * @driver: Pointer to driver object * @vm: Domain object * @@ -1706,8 +1703,7 @@ qemuDomainSecretDestroy(virDomainObjPtr vm) * Returns 0 on success, -1 on failure with error message set */ int -qemuDomainSecretPrepare(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainSecretPrepare(virQEMUDriverPtr driver, virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv = vm->privateData; @@ -1718,34 +1714,34 @@ qemuDomainSecretPrepare(virConnectPtr conn, /* disk secrets are prepared when preparing disks */ for (i = 0; i < vm->def->nhostdevs; i++) { - if (qemuDomainSecretHostdevPrepare(conn, priv, + if (qemuDomainSecretHostdevPrepare(priv, vm->def->hostdevs[i]) < 0) goto cleanup; } for (i = 0; i < vm->def->nserials; i++) { - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, + if (qemuDomainSecretChardevPrepare(cfg, priv, vm->def->serials[i]->info.alias, vm->def->serials[i]->source) < 0) goto cleanup; } for (i = 0; i < vm->def->nparallels; i++) { - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, + if (qemuDomainSecretChardevPrepare(cfg, priv, vm->def->parallels[i]->info.alias, vm->def->parallels[i]->source) < 0) goto cleanup; } for (i = 0; i < vm->def->nchannels; i++) { - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, + if (qemuDomainSecretChardevPrepare(cfg, priv, vm->def->channels[i]->info.alias, vm->def->channels[i]->source) < 0) goto cleanup; } for (i = 0; i < vm->def->nconsoles; i++) { - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, + if (qemuDomainSecretChardevPrepare(cfg, priv, vm->def->consoles[i]->info.alias, vm->def->consoles[i]->source) < 0) goto cleanup; @@ -1754,21 +1750,21 @@ qemuDomainSecretPrepare(virConnectPtr conn, for (i = 0; i < vm->def->nsmartcards; i++) if (vm->def->smartcards[i]->type == VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH && - qemuDomainSecretChardevPrepare(conn, cfg, priv, + qemuDomainSecretChardevPrepare(cfg, priv, vm->def->smartcards[i]->info.alias, vm->def->smartcards[i]->data.passthru) < 0) goto cleanup; for (i = 0; i < vm->def->nrngs; i++) { if (vm->def->rngs[i]->backend == VIR_DOMAIN_RNG_BACKEND_EGD && - qemuDomainSecretChardevPrepare(conn, cfg, priv, + qemuDomainSecretChardevPrepare(cfg, priv, vm->def->rngs[i]->info.alias, vm->def->rngs[i]->source.chardev) < 0) goto cleanup; } for (i = 0; i < vm->def->nredirdevs; i++) { - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, + if (qemuDomainSecretChardevPrepare(cfg, priv, vm->def->redirdevs[i]->info.alias, vm->def->redirdevs[i]->source) < 0) goto cleanup; @@ -11459,15 +11455,14 @@ qemuDomainCheckMigrationCapabilities(virQEMUDriverPtr driver, int -qemuDomainPrepareDiskSource(virConnectPtr conn, - virDomainDiskDefPtr disk, +qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk, qemuDomainObjPrivatePtr priv, virQEMUDriverConfigPtr cfg) { if (qemuDomainPrepareDiskSourceTLS(disk->src, cfg) < 0) return -1; - if (qemuDomainSecretDiskPrepare(conn, priv, disk) < 0) + if (qemuDomainSecretDiskPrepare(priv, disk) < 0) return -1; if (disk->src->type == VIR_STORAGE_TYPE_NETWORK && diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index f3ec5d8042..62d84a7364 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -836,24 +836,21 @@ bool qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src) ATTRIBUTE_NONNULL(1); qemuDomainSecretInfoPtr -qemuDomainSecretInfoTLSNew(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretInfoTLSNew(qemuDomainObjPrivatePtr priv, const char *srcAlias, const char *secretUUID); void qemuDomainSecretHostdevDestroy(virDomainHostdevDefPtr disk) ATTRIBUTE_NONNULL(1); -int qemuDomainSecretHostdevPrepare(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +int qemuDomainSecretHostdevPrepare(qemuDomainObjPrivatePtr priv, virDomainHostdevDefPtr hostdev) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); void qemuDomainSecretChardevDestroy(virDomainChrSourceDefPtr dev) ATTRIBUTE_NONNULL(1); -int qemuDomainSecretChardevPrepare(virConnectPtr conn, - virQEMUDriverConfigPtr cfg, +int qemuDomainSecretChardevPrepare(virQEMUDriverConfigPtr cfg, qemuDomainObjPrivatePtr priv, const char *chrAlias, virDomainChrSourceDefPtr dev) @@ -863,8 +860,7 @@ int qemuDomainSecretChardevPrepare(virConnectPtr conn, void qemuDomainSecretDestroy(virDomainObjPtr vm) ATTRIBUTE_NONNULL(1); -int qemuDomainSecretPrepare(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainSecretPrepare(virQEMUDriverPtr driver, virDomainObjPtr vm) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); @@ -1000,8 +996,7 @@ qemuDomainCheckMigrationCapabilities(virQEMUDriverPtr driver, qemuDomainAsyncJob asyncJob); int -qemuDomainPrepareDiskSource(virConnectPtr conn, - virDomainDiskDefPtr disk, +qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk, qemuDomainObjPrivatePtr priv, virQEMUDriverConfigPtr cfg); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 6eec6d282c..4533996201 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7635,7 +7635,6 @@ qemuDomainUndefine(virDomainPtr dom) static int qemuDomainAttachDeviceLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev, - virConnectPtr conn, virQEMUDriverPtr driver) { int ret = -1; @@ -7644,7 +7643,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, switch ((virDomainDeviceType) dev->type) { case VIR_DOMAIN_DEVICE_DISK: qemuDomainObjCheckDiskTaint(driver, vm, dev->data.disk, NULL); - ret = qemuDomainAttachDeviceDiskLive(conn, driver, vm, dev); + ret = qemuDomainAttachDeviceDiskLive(driver, vm, dev); if (!ret) { alias = dev->data.disk->info.alias; dev->data.disk = NULL; @@ -7677,7 +7676,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, case VIR_DOMAIN_DEVICE_HOSTDEV: qemuDomainObjCheckHostdevTaint(driver, vm, dev->data.hostdev, NULL); - ret = qemuDomainAttachHostDevice(conn, driver, vm, + ret = qemuDomainAttachHostDevice(driver, vm, dev->data.hostdev); if (!ret) { alias = dev->data.hostdev->info->alias; @@ -7686,7 +7685,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, break; case VIR_DOMAIN_DEVICE_REDIRDEV: - ret = qemuDomainAttachRedirdevDevice(conn, driver, vm, + ret = qemuDomainAttachRedirdevDevice(driver, vm, dev->data.redirdev); if (!ret) { alias = dev->data.redirdev->info.alias; @@ -7695,7 +7694,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, break; case VIR_DOMAIN_DEVICE_CHR: - ret = qemuDomainAttachChrDevice(conn, driver, vm, + ret = qemuDomainAttachChrDevice(driver, vm, dev->data.chr); if (!ret) { alias = dev->data.chr->info.alias; @@ -7704,7 +7703,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, break; case VIR_DOMAIN_DEVICE_RNG: - ret = qemuDomainAttachRNGDevice(conn, driver, vm, + ret = qemuDomainAttachRNGDevice(driver, vm, dev->data.rng); if (!ret) { alias = dev->data.rng->info.alias; @@ -8441,8 +8440,7 @@ qemuDomainUpdateDeviceConfig(virDomainDefPtr vmdef, } static int -qemuDomainAttachDeviceLiveAndConfig(virConnectPtr conn, - virDomainObjPtr vm, +qemuDomainAttachDeviceLiveAndConfig(virDomainObjPtr vm, virQEMUDriverPtr driver, const char *xml, unsigned int flags) @@ -8501,7 +8499,7 @@ qemuDomainAttachDeviceLiveAndConfig(virConnectPtr conn, if (virDomainDefCompatibleDevice(vm->def, dev_copy) < 0) goto cleanup; - if ((ret = qemuDomainAttachDeviceLive(vm, dev_copy, conn, driver)) < 0) + if ((ret = qemuDomainAttachDeviceLive(vm, dev_copy, driver)) < 0) goto cleanup; /* * update domain status forcibly because the domain status may be @@ -8557,7 +8555,7 @@ qemuDomainAttachDeviceFlags(virDomainPtr dom, if (virDomainObjUpdateModificationImpact(vm, &flags) < 0) goto endjob; - if (qemuDomainAttachDeviceLiveAndConfig(dom->conn, vm, driver, xml, flags) < 0) + if (qemuDomainAttachDeviceLiveAndConfig(vm, driver, xml, flags) < 0) goto endjob; ret = 0; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index a2268be576..1549d4b4d8 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -354,8 +354,7 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, * Attaches disk to a VM. This function aggregates common code for all bus types. * In cases when the VM crashed while adding the disk, -2 is returned. */ static int -qemuDomainAttachDiskGeneric(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk) { @@ -382,7 +381,7 @@ qemuDomainAttachDiskGeneric(virConnectPtr conn, if (qemuAssignDeviceDiskAlias(vm->def, disk) < 0) goto error; - if (qemuDomainPrepareDiskSource(conn, disk, priv, cfg) < 0) + if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0) goto error; srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(disk->src); @@ -487,8 +486,7 @@ qemuDomainAttachDiskGeneric(virConnectPtr conn, static int -qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachVirtioDiskDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk) { @@ -499,7 +497,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, if (qemuDomainEnsureVirtioAddress(&releaseaddr, vm, &dev, disk->dst) < 0) return -1; - if ((rv = qemuDomainAttachDiskGeneric(conn, driver, vm, disk)) < 0) { + if ((rv = qemuDomainAttachDiskGeneric(driver, vm, disk)) < 0) { if (rv == -1 && releaseaddr) qemuDomainReleaseDeviceAddress(vm, &disk->info, disk->dst); @@ -639,8 +637,7 @@ qemuDomainFindOrCreateSCSIDiskController(virQEMUDriverPtr driver, static int -qemuDomainAttachSCSIDisk(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachSCSIDisk(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk) { @@ -666,7 +663,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, return -1; } - if (qemuDomainAttachDiskGeneric(conn, driver, vm, disk) < 0) + if (qemuDomainAttachDiskGeneric(driver, vm, disk) < 0) return -1; return 0; @@ -674,8 +671,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, static int -qemuDomainAttachUSBMassStorageDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachUSBMassStorageDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk) { @@ -686,7 +682,7 @@ qemuDomainAttachUSBMassStorageDevice(virConnectPtr conn, return -1; } - if (qemuDomainAttachDiskGeneric(conn, driver, vm, disk) < 0) { + if (qemuDomainAttachDiskGeneric(driver, vm, disk) < 0) { virDomainUSBAddressRelease(priv->usbaddrs, &disk->info); return -1; } @@ -696,8 +692,7 @@ qemuDomainAttachUSBMassStorageDevice(virConnectPtr conn, int -qemuDomainAttachDeviceDiskLive(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachDeviceDiskLive(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev) { @@ -761,15 +756,15 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn, _("disk device='lun' is not supported for usb bus")); break; } - ret = qemuDomainAttachUSBMassStorageDevice(conn, driver, vm, disk); + ret = qemuDomainAttachUSBMassStorageDevice(driver, vm, disk); break; case VIR_DOMAIN_DISK_BUS_VIRTIO: - ret = qemuDomainAttachVirtioDiskDevice(conn, driver, vm, disk); + ret = qemuDomainAttachVirtioDiskDevice(driver, vm, disk); break; case VIR_DOMAIN_DISK_BUS_SCSI: - ret = qemuDomainAttachSCSIDisk(conn, driver, vm, disk); + ret = qemuDomainAttachSCSIDisk(driver, vm, disk); break; case VIR_DOMAIN_DISK_BUS_IDE: @@ -954,11 +949,8 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, * as a hostdev (the hostdev code will reach over into the * netdev-specific code as appropriate), then also added to * the nets list (see cleanup:) if successful. - * - * qemuDomainAttachHostDevice uses a connection to resolve - * a SCSI hostdev secret, which is not this case, so pass NULL. */ - ret = qemuDomainAttachHostDevice(NULL, driver, vm, + ret = qemuDomainAttachHostDevice(driver, vm, virDomainNetGetActualHostdev(net)); goto cleanup; break; @@ -1519,8 +1511,7 @@ qemuDomainGetTLSObjects(virQEMUCapsPtr qemuCaps, static int -qemuDomainAddChardevTLSObjects(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAddChardevTLSObjects(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainChrSourceDefPtr dev, char *devAlias, @@ -1545,7 +1536,7 @@ qemuDomainAddChardevTLSObjects(virConnectPtr conn, goto cleanup; } - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, devAlias, dev) < 0) + if (qemuDomainSecretChardevPrepare(cfg, priv, devAlias, dev) < 0) goto cleanup; if ((chrSourcePriv = QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev))) @@ -1623,8 +1614,7 @@ qemuDomainDelChardevTLSObjects(virQEMUDriverPtr driver, } -int qemuDomainAttachRedirdevDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainRedirdevDefPtr redirdev) { @@ -1655,7 +1645,7 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn, if (VIR_REALLOC_N(def->redirdevs, def->nredirdevs+1) < 0) goto cleanup; - if (qemuDomainAddChardevTLSObjects(conn, driver, vm, redirdev->source, + if (qemuDomainAddChardevTLSObjects(driver, vm, redirdev->source, redirdev->info.alias, charAlias, &tlsAlias, &secAlias) < 0) goto audit; @@ -1861,8 +1851,7 @@ qemuDomainAttachChrDeviceAssignAddr(virDomainObjPtr vm, return 0; } -int qemuDomainAttachChrDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachChrDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainChrDefPtr chr) { @@ -1914,7 +1903,7 @@ int qemuDomainAttachChrDevice(virConnectPtr conn, if (qemuDomainChrPreInsert(vmdef, chr) < 0) goto cleanup; - if (qemuDomainAddChardevTLSObjects(conn, driver, vm, dev, + if (qemuDomainAddChardevTLSObjects(driver, vm, dev, chr->info.alias, charAlias, &tlsAlias, &secAlias) < 0) goto audit; @@ -1969,8 +1958,7 @@ int qemuDomainAttachChrDevice(virConnectPtr conn, int -qemuDomainAttachRNGDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachRNGDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainRNGDefPtr rng) { @@ -2024,7 +2012,7 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, goto cleanup; if (rng->backend == VIR_DOMAIN_RNG_BACKEND_EGD) { - if (qemuDomainAddChardevTLSObjects(conn, driver, vm, + if (qemuDomainAddChardevTLSObjects(driver, vm, rng->source.chardev, rng->info.alias, charAlias, &tlsAlias, &secAlias) < 0) @@ -2325,8 +2313,7 @@ qemuDomainAttachHostUSBDevice(virQEMUDriverPtr driver, static int -qemuDomainAttachHostSCSIDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev) { @@ -2383,7 +2370,7 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, if (qemuAssignDeviceHostdevAlias(vm->def, &hostdev->info->alias, -1) < 0) goto cleanup; - if (qemuDomainSecretHostdevPrepare(conn, priv, hostdev) < 0) + if (qemuDomainSecretHostdevPrepare(priv, hostdev) < 0) goto cleanup; if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { @@ -2585,8 +2572,7 @@ qemuDomainAttachSCSIVHostDevice(virQEMUDriverPtr driver, int -qemuDomainAttachHostDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachHostDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev) { @@ -2611,7 +2597,7 @@ qemuDomainAttachHostDevice(virConnectPtr conn, break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: - if (qemuDomainAttachHostSCSIDevice(conn, driver, vm, + if (qemuDomainAttachHostSCSIDevice(driver, vm, hostdev) < 0) goto error; break; diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h index 9a0c057f19..b2f5fa688b 100644 --- a/src/qemu/qemu_hotplug.h +++ b/src/qemu/qemu_hotplug.h @@ -62,19 +62,16 @@ int qemuDomainGetTLSObjects(virQEMUCapsPtr qemuCaps, int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainControllerDefPtr controller); -int qemuDomainAttachDeviceDiskLive(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachDeviceDiskLive(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev); int qemuDomainAttachNetDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainNetDefPtr net); -int qemuDomainAttachRedirdevDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainRedirdevDefPtr hostdev); -int qemuDomainAttachHostDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachHostDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev); int qemuDomainAttachShmemDevice(virQEMUDriverPtr driver, @@ -140,15 +137,13 @@ int qemuDomainAttachLease(virQEMUDriverPtr driver, int qemuDomainDetachLease(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainLeaseDefPtr lease); -int qemuDomainAttachChrDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachChrDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainChrDefPtr chr); int qemuDomainDetachChrDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainChrDefPtr chr); -int qemuDomainAttachRNGDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachRNGDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainRNGDefPtr rng); int qemuDomainDetachRNGDevice(virQEMUDriverPtr driver, diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 88639c71fc..d202e87fbe 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -128,7 +128,6 @@ qemuMigrationCheckTLSCreds(virQEMUDriverPtr driver, /* qemuMigrationCheckSetupTLS - * @conn: Connection pointer * @driver: pointer to qemu driver * @vm: domain object * @cfg: configuration pointer @@ -144,8 +143,7 @@ qemuMigrationCheckTLSCreds(virQEMUDriverPtr driver, * Returns 0 on success, -1 on error/failure */ static int -qemuMigrationCheckSetupTLS(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuMigrationCheckSetupTLS(virQEMUDriverPtr driver, virQEMUDriverConfigPtr cfg, virDomainObjPtr vm, qemuDomainAsyncJob asyncJob) @@ -171,7 +169,7 @@ qemuMigrationCheckSetupTLS(virConnectPtr conn, /* If there's a secret, then grab/store it now using the connection */ if (cfg->migrateTLSx509secretUUID && !(priv->migSecinfo = - qemuDomainSecretInfoTLSNew(conn, priv, QEMU_MIGRATION_TLS_ALIAS_BASE, + qemuDomainSecretInfoTLSNew(priv, QEMU_MIGRATION_TLS_ALIAS_BASE, cfg->migrateTLSx509secretUUID))) return -1; @@ -2180,7 +2178,7 @@ qemuMigrationBegin(virConnectPtr conn, if (flags & VIR_MIGRATE_TLS) { cfg = virQEMUDriverGetConfig(driver); - if (qemuMigrationCheckSetupTLS(conn, driver, cfg, vm, asyncJob) < 0) + if (qemuMigrationCheckSetupTLS(driver, cfg, vm, asyncJob) < 0) goto endjob; } @@ -2788,7 +2786,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, * set the migration TLS parameters */ if (flags & VIR_MIGRATE_TLS) { cfg = virQEMUDriverGetConfig(driver); - if (qemuMigrationCheckSetupTLS(dconn, driver, cfg, vm, + if (qemuMigrationCheckSetupTLS(driver, cfg, vm, QEMU_ASYNC_JOB_MIGRATION_IN) < 0) goto stopjob; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 586d11bba3..27454fb583 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -368,11 +368,11 @@ qemuProcessFindDomainDiskByAlias(virDomainObjPtr vm, } static int -qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn, - virDomainDiskDefPtr disk, +qemuProcessGetVolumeQcowPassphrase(virDomainDiskDefPtr disk, char **secretRet, size_t *secretLen) { + virConnectPtr conn = NULL; char *passphrase; unsigned char *data; size_t size; @@ -387,19 +387,8 @@ qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn, } enc = disk->src->encryption; - if (!conn) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("cannot find secrets without a connection")); + if (!(conn = virGetConnectSecret())) goto cleanup; - } - - if (conn->secretDriver == NULL || - conn->secretDriver->secretLookupByUUID == NULL || - conn->secretDriver->secretGetValue == NULL) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("secret storage not supported")); - goto cleanup; - } if (enc->format != VIR_STORAGE_ENCRYPTION_FORMAT_QCOW || enc->nsecrets != 1 || @@ -442,6 +431,7 @@ qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn, ret = 0; cleanup: + virObjectUnref(conn); return ret; } @@ -453,7 +443,6 @@ qemuProcessFindVolumeQcowPassphrase(qemuMonitorPtr mon ATTRIBUTE_UNUSED, size_t *secretLen, void *opaque ATTRIBUTE_UNUSED) { - virConnectPtr conn = NULL; virDomainDiskDefPtr disk; int ret = -1; @@ -465,11 +454,9 @@ qemuProcessFindVolumeQcowPassphrase(qemuMonitorPtr mon ATTRIBUTE_UNUSED, goto cleanup; } - conn = virGetConnectSecret(); - ret = qemuProcessGetVolumeQcowPassphrase(conn, disk, secretRet, secretLen); + ret = qemuProcessGetVolumeQcowPassphrase(disk, secretRet, secretLen); cleanup: - virObjectUnref(conn); virObjectUnlock(vm); return ret; } @@ -2567,8 +2554,7 @@ qemuProcessResctrlCreate(virQEMUDriverPtr driver, static int -qemuProcessInitPasswords(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessInitPasswords(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob) { @@ -2613,8 +2599,7 @@ qemuProcessInitPasswords(virConnectPtr conn, continue; VIR_FREE(secret); - if (qemuProcessGetVolumeQcowPassphrase(conn, - vm->def->disks[i], + if (qemuProcessGetVolumeQcowPassphrase(vm->def->disks[i], &secret, &secretLen) < 0) goto cleanup; @@ -5589,8 +5574,7 @@ qemuProcessPrepareDomainNUMAPlacement(virDomainObjPtr vm, static int -qemuProcessPrepareDomainStorage(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessPrepareDomainStorage(virQEMUDriverPtr driver, virDomainObjPtr vm, qemuDomainObjPrivatePtr priv, virQEMUDriverConfigPtr cfg, @@ -5611,7 +5595,7 @@ qemuProcessPrepareDomainStorage(virConnectPtr conn, continue; } - if (qemuDomainPrepareDiskSource(conn, disk, priv, cfg) < 0) + if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0) return -1; } @@ -5722,14 +5706,14 @@ qemuProcessPrepareDomain(virConnectPtr conn, goto cleanup; VIR_DEBUG("Setting up storage"); - if (qemuProcessPrepareDomainStorage(conn, driver, vm, priv, cfg, flags) < 0) + if (qemuProcessPrepareDomainStorage(driver, vm, priv, cfg, flags) < 0) goto cleanup; VIR_DEBUG("Prepare chardev source backends for TLS"); qemuDomainPrepareChardevSource(vm->def, cfg); VIR_DEBUG("Add secrets to hostdevs and chardevs"); - if (qemuDomainSecretPrepare(conn, driver, vm) < 0) + if (qemuDomainSecretPrepare(driver, vm) < 0) goto cleanup; for (i = 0; i < vm->def->nchannels; i++) { @@ -6180,7 +6164,7 @@ qemuProcessLaunch(virConnectPtr conn, goto cleanup; VIR_DEBUG("Setting any required VM passwords"); - if (qemuProcessInitPasswords(conn, driver, vm, asyncJob) < 0) + if (qemuProcessInitPasswords(driver, vm, asyncJob) < 0) goto cleanup; /* set default link states */ diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index 63bfe44145..d42f8e12cb 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -120,10 +120,10 @@ testQemuHotplugAttach(virDomainObjPtr vm, /* conn in only used for storage pool and secrets lookup so as long * as we don't use any of them, passing NULL should be safe */ - ret = qemuDomainAttachDeviceDiskLive(NULL, &driver, vm, dev); + ret = qemuDomainAttachDeviceDiskLive(&driver, vm, dev); break; case VIR_DOMAIN_DEVICE_CHR: - ret = qemuDomainAttachChrDevice(NULL, &driver, vm, dev->data.chr); + ret = qemuDomainAttachChrDevice(&driver, vm, dev->data.chr); break; case VIR_DOMAIN_DEVICE_SHMEM: ret = qemuDomainAttachShmemDevice(&driver, vm, dev->data.shmem); -- 2.14.3

On 02/09/2018 12:24 PM, Daniel P. Berrangé wrote:
During domain startup there are many places where we need to acquire secrets. Currently code passes around a virConnectPtr, except in the places where we pass in NULL. So there are a few codepaths where ability to start guests using secrets will fail. Change to acquire a handle to the secret driver when needed.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_domain.c | 111 ++++++++++++++++++++++------------------------ src/qemu/qemu_domain.h | 15 +++---- src/qemu/qemu_driver.c | 18 ++++---- src/qemu/qemu_hotplug.c | 64 +++++++++++--------------- src/qemu/qemu_hotplug.h | 15 +++---- src/qemu/qemu_migration.c | 10 ++--- src/qemu/qemu_process.c | 40 +++++------------ tests/qemuhotplugtest.c | 4 +- 8 files changed, 114 insertions(+), 163 deletions(-)
More, but different qemuxml2argvtest failures. John
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 84207db16a..27063873a4 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1151,7 +1151,6 @@ qemuDomainChrSourcePrivateDispose(void *obj)
/* qemuDomainSecretPlainSetup: - * @conn: Pointer to connection * @secinfo: Pointer to secret info * @usageType: The virSecretUsageType * @username: username to use for authentication (may be NULL) @@ -1162,24 +1161,33 @@ qemuDomainChrSourcePrivateDispose(void *obj) * Returns 0 on success, -1 on failure with error message */ static int -qemuDomainSecretPlainSetup(virConnectPtr conn, - qemuDomainSecretInfoPtr secinfo, +qemuDomainSecretPlainSetup(qemuDomainSecretInfoPtr secinfo, virSecretUsageType usageType, const char *username, virSecretLookupTypeDefPtr seclookupdef) { + virConnectPtr conn; + int ret = -1; + + conn = virGetConnectSecret(); + if (!conn) + return -1; + secinfo->type = VIR_DOMAIN_SECRET_INFO_TYPE_PLAIN; if (VIR_STRDUP(secinfo->s.plain.username, username) < 0) - return -1; + goto cleanup;
- return virSecretGetSecretString(conn, seclookupdef, usageType, - &secinfo->s.plain.secret, - &secinfo->s.plain.secretlen); + ret = virSecretGetSecretString(conn, seclookupdef, usageType, + &secinfo->s.plain.secret, + &secinfo->s.plain.secretlen); + + cleanup: + virObjectUnref(conn); + return ret; }
/* qemuDomainSecretAESSetup: - * @conn: Pointer to connection * @priv: pointer to domain private object * @secinfo: Pointer to secret info * @srcalias: Alias of the disk/hostdev used to generate the secret alias @@ -1193,8 +1201,7 @@ qemuDomainSecretPlainSetup(virConnectPtr conn, * Returns 0 on success, -1 on failure with error message */ static int -qemuDomainSecretAESSetup(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretAESSetup(qemuDomainObjPrivatePtr priv, qemuDomainSecretInfoPtr secinfo, const char *srcalias, virSecretUsageType usageType, @@ -1202,6 +1209,7 @@ qemuDomainSecretAESSetup(virConnectPtr conn, virSecretLookupTypeDefPtr seclookupdef, bool isLuks) { + virConnectPtr conn; int ret = -1; uint8_t *raw_iv = NULL; size_t ivlen = QEMU_DOMAIN_AES_IV_LEN; @@ -1210,16 +1218,20 @@ qemuDomainSecretAESSetup(virConnectPtr conn, uint8_t *ciphertext = NULL; size_t ciphertextlen = 0;
+ conn = virGetConnectSecret(); + if (!conn) + return -1; + secinfo->type = VIR_DOMAIN_SECRET_INFO_TYPE_AES; if (VIR_STRDUP(secinfo->s.aes.username, username) < 0) - return -1; + goto cleanup;
if (!(secinfo->s.aes.alias = qemuDomainGetSecretAESAlias(srcalias, isLuks))) - return -1; + goto cleanup;
/* Create a random initialization vector */ if (!(raw_iv = virCryptoGenerateRandom(ivlen))) - return -1; + goto cleanup;
/* Encode the IV and save that since qemu will need it */ if (!(secinfo->s.aes.iv = virStringEncodeBase64(raw_iv, ivlen))) @@ -1250,13 +1262,12 @@ qemuDomainSecretAESSetup(virConnectPtr conn, VIR_DISPOSE_N(raw_iv, ivlen); VIR_DISPOSE_N(secret, secretlen); VIR_DISPOSE_N(ciphertext, ciphertextlen); - + virObjectUnref(conn); return ret; }
/* qemuDomainSecretSetup: - * @conn: Pointer to connection * @priv: pointer to domain private object * @secinfo: Pointer to secret info * @srcalias: Alias of the disk/hostdev used to generate the secret alias @@ -1273,8 +1284,7 @@ qemuDomainSecretAESSetup(virConnectPtr conn, * Returns 0 on success, -1 on failure */ static int -qemuDomainSecretSetup(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretSetup(qemuDomainObjPrivatePtr priv, qemuDomainSecretInfoPtr secinfo, const char *srcalias, virSecretUsageType usageType, @@ -1291,12 +1301,12 @@ qemuDomainSecretSetup(virConnectPtr conn, (usageType == VIR_SECRET_USAGE_TYPE_ISCSI && iscsiHasPS) || usageType == VIR_SECRET_USAGE_TYPE_VOLUME || usageType == VIR_SECRET_USAGE_TYPE_TLS)) { - if (qemuDomainSecretAESSetup(conn, priv, secinfo, srcalias, + if (qemuDomainSecretAESSetup(priv, secinfo, srcalias, usageType, username, seclookupdef, isLuks) < 0) return -1; } else { - if (qemuDomainSecretPlainSetup(conn, secinfo, usageType, + if (qemuDomainSecretPlainSetup(secinfo, usageType, username, seclookupdef) < 0) return -1; } @@ -1305,7 +1315,6 @@ qemuDomainSecretSetup(virConnectPtr conn,
/* qemuDomainSecretInfoNew: - * @conn: Pointer to connection * @priv: pointer to domain private object * @srcAlias: Alias base to use for TLS object * @usageType: Secret usage type @@ -1319,8 +1328,7 @@ qemuDomainSecretSetup(virConnectPtr conn, * to eventually free @secinfo. */ static qemuDomainSecretInfoPtr -qemuDomainSecretInfoNew(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretInfoNew(qemuDomainObjPrivatePtr priv, const char *srcAlias, virSecretUsageType usageType, const char *username, @@ -1332,7 +1340,7 @@ qemuDomainSecretInfoNew(virConnectPtr conn, if (VIR_ALLOC(secinfo) < 0) return NULL;
- if (qemuDomainSecretSetup(conn, priv, secinfo, srcAlias, usageType, + if (qemuDomainSecretSetup(priv, secinfo, srcAlias, usageType, username, lookupDef, isLuks) < 0) goto error;
@@ -1352,7 +1360,6 @@ qemuDomainSecretInfoNew(virConnectPtr conn,
/** * qemuDomainSecretInfoTLSNew: - * @conn: Pointer to connection * @priv: pointer to domain private object * @srcAlias: Alias base to use for TLS object * @secretUUID: Provide a secretUUID value to look up/create the secretInfo @@ -1363,8 +1370,7 @@ qemuDomainSecretInfoNew(virConnectPtr conn, * Returns qemuDomainSecretInfoPtr or NULL on error. */ qemuDomainSecretInfoPtr -qemuDomainSecretInfoTLSNew(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretInfoTLSNew(qemuDomainObjPrivatePtr priv, const char *srcAlias, const char *secretUUID) { @@ -1378,7 +1384,7 @@ qemuDomainSecretInfoTLSNew(virConnectPtr conn, } seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID;
- return qemuDomainSecretInfoNew(conn, priv, srcAlias, + return qemuDomainSecretInfoNew(priv, srcAlias, VIR_SECRET_USAGE_TYPE_TLS, NULL, &seclookupdef, false); } @@ -1440,7 +1446,6 @@ qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src)
/** * qemuDomainSecretStorageSourcePrepare: - * @conn: connection object - for secret lookup * @priv: domain private object * @src: storage source struct to setup * @authalias: prefix of the alias for secret holding authentication data @@ -1454,8 +1459,7 @@ qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src) * Returns 0 on success; -1 on error while reporting an libvirt error. */ static int -qemuDomainSecretStorageSourcePrepare(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv, virStorageSourcePtr src, const char *authalias, const char *encalias) @@ -1479,7 +1483,7 @@ qemuDomainSecretStorageSourcePrepare(virConnectPtr conn, usageType = VIR_SECRET_USAGE_TYPE_CEPH;
if (!(srcPriv->secinfo = - qemuDomainSecretInfoNew(conn, priv, authalias, + qemuDomainSecretInfoNew(priv, authalias, usageType, src->auth->username, &src->auth->seclookupdef, false))) return -1; @@ -1487,7 +1491,7 @@ qemuDomainSecretStorageSourcePrepare(virConnectPtr conn,
if (hasEnc) { if (!(srcPriv->encinfo = - qemuDomainSecretInfoNew(conn, priv, encalias, + qemuDomainSecretInfoNew(priv, encalias, VIR_SECRET_USAGE_TYPE_VOLUME, NULL, &src->encryption->secrets[0]->seclookupdef, true))) @@ -1499,7 +1503,6 @@ qemuDomainSecretStorageSourcePrepare(virConnectPtr conn,
/* qemuDomainSecretDiskPrepare: - * @conn: Pointer to connection * @priv: pointer to domain private object * @disk: Pointer to a disk definition * @@ -1509,11 +1512,10 @@ qemuDomainSecretStorageSourcePrepare(virConnectPtr conn, */
static int -qemuDomainSecretDiskPrepare(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretDiskPrepare(qemuDomainObjPrivatePtr priv, virDomainDiskDefPtr disk) { - return qemuDomainSecretStorageSourcePrepare(conn, priv, disk->src, + return qemuDomainSecretStorageSourcePrepare(priv, disk->src, disk->info.alias, disk->info.alias); } @@ -1543,7 +1545,6 @@ qemuDomainSecretHostdevDestroy(virDomainHostdevDefPtr hostdev)
/* qemuDomainSecretHostdevPrepare: - * @conn: Pointer to connection * @priv: pointer to domain private object * @hostdev: Pointer to a hostdev definition * @@ -1552,8 +1553,7 @@ qemuDomainSecretHostdevDestroy(virDomainHostdevDefPtr hostdev) * Returns 0 on success, -1 on failure */ int -qemuDomainSecretHostdevPrepare(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretHostdevPrepare(qemuDomainObjPrivatePtr priv, virDomainHostdevDefPtr hostdev) { if (virHostdevIsSCSIDevice(hostdev)) { @@ -1571,7 +1571,7 @@ qemuDomainSecretHostdevPrepare(virConnectPtr conn, srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
if (!(srcPriv->secinfo = - qemuDomainSecretInfoNew(conn, priv, hostdev->info->alias, + qemuDomainSecretInfoNew(priv, hostdev->info->alias, VIR_SECRET_USAGE_TYPE_ISCSI, src->auth->username, &src->auth->seclookupdef, @@ -1603,7 +1603,6 @@ qemuDomainSecretChardevDestroy(virDomainChrSourceDefPtr dev)
/* qemuDomainSecretChardevPrepare: - * @conn: Pointer to connection * @cfg: Pointer to driver config object * @priv: pointer to domain private object * @chrAlias: Alias of the chr device @@ -1615,8 +1614,7 @@ qemuDomainSecretChardevDestroy(virDomainChrSourceDefPtr dev) * Returns 0 on success, -1 on failure */ int -qemuDomainSecretChardevPrepare(virConnectPtr conn, - virQEMUDriverConfigPtr cfg, +qemuDomainSecretChardevPrepare(virQEMUDriverConfigPtr cfg, qemuDomainObjPrivatePtr priv, const char *chrAlias, virDomainChrSourceDefPtr dev) @@ -1635,7 +1633,7 @@ qemuDomainSecretChardevPrepare(virConnectPtr conn, return -1;
chrSourcePriv->secinfo = - qemuDomainSecretInfoTLSNew(conn, priv, charAlias, + qemuDomainSecretInfoTLSNew(priv, charAlias, cfg->chardevTLSx509secretUUID); VIR_FREE(charAlias);
@@ -1693,7 +1691,6 @@ qemuDomainSecretDestroy(virDomainObjPtr vm)
/* qemuDomainSecretPrepare: - * @conn: Pointer to connection * @driver: Pointer to driver object * @vm: Domain object * @@ -1706,8 +1703,7 @@ qemuDomainSecretDestroy(virDomainObjPtr vm) * Returns 0 on success, -1 on failure with error message set */ int -qemuDomainSecretPrepare(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainSecretPrepare(virQEMUDriverPtr driver, virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv = vm->privateData; @@ -1718,34 +1714,34 @@ qemuDomainSecretPrepare(virConnectPtr conn, /* disk secrets are prepared when preparing disks */
for (i = 0; i < vm->def->nhostdevs; i++) { - if (qemuDomainSecretHostdevPrepare(conn, priv, + if (qemuDomainSecretHostdevPrepare(priv, vm->def->hostdevs[i]) < 0) goto cleanup; }
for (i = 0; i < vm->def->nserials; i++) { - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, + if (qemuDomainSecretChardevPrepare(cfg, priv, vm->def->serials[i]->info.alias, vm->def->serials[i]->source) < 0) goto cleanup; }
for (i = 0; i < vm->def->nparallels; i++) { - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, + if (qemuDomainSecretChardevPrepare(cfg, priv, vm->def->parallels[i]->info.alias, vm->def->parallels[i]->source) < 0) goto cleanup; }
for (i = 0; i < vm->def->nchannels; i++) { - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, + if (qemuDomainSecretChardevPrepare(cfg, priv, vm->def->channels[i]->info.alias, vm->def->channels[i]->source) < 0) goto cleanup; }
for (i = 0; i < vm->def->nconsoles; i++) { - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, + if (qemuDomainSecretChardevPrepare(cfg, priv, vm->def->consoles[i]->info.alias, vm->def->consoles[i]->source) < 0) goto cleanup; @@ -1754,21 +1750,21 @@ qemuDomainSecretPrepare(virConnectPtr conn, for (i = 0; i < vm->def->nsmartcards; i++) if (vm->def->smartcards[i]->type == VIR_DOMAIN_SMARTCARD_TYPE_PASSTHROUGH && - qemuDomainSecretChardevPrepare(conn, cfg, priv, + qemuDomainSecretChardevPrepare(cfg, priv, vm->def->smartcards[i]->info.alias, vm->def->smartcards[i]->data.passthru) < 0) goto cleanup;
for (i = 0; i < vm->def->nrngs; i++) { if (vm->def->rngs[i]->backend == VIR_DOMAIN_RNG_BACKEND_EGD && - qemuDomainSecretChardevPrepare(conn, cfg, priv, + qemuDomainSecretChardevPrepare(cfg, priv, vm->def->rngs[i]->info.alias, vm->def->rngs[i]->source.chardev) < 0) goto cleanup; }
for (i = 0; i < vm->def->nredirdevs; i++) { - if (qemuDomainSecretChardevPrepare(conn, cfg, priv, + if (qemuDomainSecretChardevPrepare(cfg, priv, vm->def->redirdevs[i]->info.alias, vm->def->redirdevs[i]->source) < 0) goto cleanup; @@ -11459,15 +11455,14 @@ qemuDomainCheckMigrationCapabilities(virQEMUDriverPtr driver,
int -qemuDomainPrepareDiskSource(virConnectPtr conn, - virDomainDiskDefPtr disk, +qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk, qemuDomainObjPrivatePtr priv, virQEMUDriverConfigPtr cfg) { if (qemuDomainPrepareDiskSourceTLS(disk->src, cfg) < 0) return -1;
- if (qemuDomainSecretDiskPrepare(conn, priv, disk) < 0) + if (qemuDomainSecretDiskPrepare(priv, disk) < 0) return -1;
if (disk->src->type == VIR_STORAGE_TYPE_NETWORK && diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index f3ec5d8042..62d84a7364 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -836,24 +836,21 @@ bool qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src) ATTRIBUTE_NONNULL(1);
qemuDomainSecretInfoPtr -qemuDomainSecretInfoTLSNew(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +qemuDomainSecretInfoTLSNew(qemuDomainObjPrivatePtr priv, const char *srcAlias, const char *secretUUID);
void qemuDomainSecretHostdevDestroy(virDomainHostdevDefPtr disk) ATTRIBUTE_NONNULL(1);
-int qemuDomainSecretHostdevPrepare(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, +int qemuDomainSecretHostdevPrepare(qemuDomainObjPrivatePtr priv, virDomainHostdevDefPtr hostdev) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
void qemuDomainSecretChardevDestroy(virDomainChrSourceDefPtr dev) ATTRIBUTE_NONNULL(1);
-int qemuDomainSecretChardevPrepare(virConnectPtr conn, - virQEMUDriverConfigPtr cfg, +int qemuDomainSecretChardevPrepare(virQEMUDriverConfigPtr cfg, qemuDomainObjPrivatePtr priv, const char *chrAlias, virDomainChrSourceDefPtr dev) @@ -863,8 +860,7 @@ int qemuDomainSecretChardevPrepare(virConnectPtr conn, void qemuDomainSecretDestroy(virDomainObjPtr vm) ATTRIBUTE_NONNULL(1);
-int qemuDomainSecretPrepare(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainSecretPrepare(virQEMUDriverPtr driver, virDomainObjPtr vm) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
@@ -1000,8 +996,7 @@ qemuDomainCheckMigrationCapabilities(virQEMUDriverPtr driver, qemuDomainAsyncJob asyncJob);
int -qemuDomainPrepareDiskSource(virConnectPtr conn, - virDomainDiskDefPtr disk, +qemuDomainPrepareDiskSource(virDomainDiskDefPtr disk, qemuDomainObjPrivatePtr priv, virQEMUDriverConfigPtr cfg);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 6eec6d282c..4533996201 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7635,7 +7635,6 @@ qemuDomainUndefine(virDomainPtr dom) static int qemuDomainAttachDeviceLive(virDomainObjPtr vm, virDomainDeviceDefPtr dev, - virConnectPtr conn, virQEMUDriverPtr driver) { int ret = -1; @@ -7644,7 +7643,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, switch ((virDomainDeviceType) dev->type) { case VIR_DOMAIN_DEVICE_DISK: qemuDomainObjCheckDiskTaint(driver, vm, dev->data.disk, NULL); - ret = qemuDomainAttachDeviceDiskLive(conn, driver, vm, dev); + ret = qemuDomainAttachDeviceDiskLive(driver, vm, dev); if (!ret) { alias = dev->data.disk->info.alias; dev->data.disk = NULL; @@ -7677,7 +7676,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm,
case VIR_DOMAIN_DEVICE_HOSTDEV: qemuDomainObjCheckHostdevTaint(driver, vm, dev->data.hostdev, NULL); - ret = qemuDomainAttachHostDevice(conn, driver, vm, + ret = qemuDomainAttachHostDevice(driver, vm, dev->data.hostdev); if (!ret) { alias = dev->data.hostdev->info->alias; @@ -7686,7 +7685,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, break;
case VIR_DOMAIN_DEVICE_REDIRDEV: - ret = qemuDomainAttachRedirdevDevice(conn, driver, vm, + ret = qemuDomainAttachRedirdevDevice(driver, vm, dev->data.redirdev); if (!ret) { alias = dev->data.redirdev->info.alias; @@ -7695,7 +7694,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, break;
case VIR_DOMAIN_DEVICE_CHR: - ret = qemuDomainAttachChrDevice(conn, driver, vm, + ret = qemuDomainAttachChrDevice(driver, vm, dev->data.chr); if (!ret) { alias = dev->data.chr->info.alias; @@ -7704,7 +7703,7 @@ qemuDomainAttachDeviceLive(virDomainObjPtr vm, break;
case VIR_DOMAIN_DEVICE_RNG: - ret = qemuDomainAttachRNGDevice(conn, driver, vm, + ret = qemuDomainAttachRNGDevice(driver, vm, dev->data.rng); if (!ret) { alias = dev->data.rng->info.alias; @@ -8441,8 +8440,7 @@ qemuDomainUpdateDeviceConfig(virDomainDefPtr vmdef, }
static int -qemuDomainAttachDeviceLiveAndConfig(virConnectPtr conn, - virDomainObjPtr vm, +qemuDomainAttachDeviceLiveAndConfig(virDomainObjPtr vm, virQEMUDriverPtr driver, const char *xml, unsigned int flags) @@ -8501,7 +8499,7 @@ qemuDomainAttachDeviceLiveAndConfig(virConnectPtr conn, if (virDomainDefCompatibleDevice(vm->def, dev_copy) < 0) goto cleanup;
- if ((ret = qemuDomainAttachDeviceLive(vm, dev_copy, conn, driver)) < 0) + if ((ret = qemuDomainAttachDeviceLive(vm, dev_copy, driver)) < 0) goto cleanup; /* * update domain status forcibly because the domain status may be @@ -8557,7 +8555,7 @@ qemuDomainAttachDeviceFlags(virDomainPtr dom, if (virDomainObjUpdateModificationImpact(vm, &flags) < 0) goto endjob;
- if (qemuDomainAttachDeviceLiveAndConfig(dom->conn, vm, driver, xml, flags) < 0) + if (qemuDomainAttachDeviceLiveAndConfig(vm, driver, xml, flags) < 0) goto endjob;
ret = 0; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index a2268be576..1549d4b4d8 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -354,8 +354,7 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, * Attaches disk to a VM. This function aggregates common code for all bus types. * In cases when the VM crashed while adding the disk, -2 is returned. */ static int -qemuDomainAttachDiskGeneric(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk) { @@ -382,7 +381,7 @@ qemuDomainAttachDiskGeneric(virConnectPtr conn, if (qemuAssignDeviceDiskAlias(vm->def, disk) < 0) goto error;
- if (qemuDomainPrepareDiskSource(conn, disk, priv, cfg) < 0) + if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0) goto error;
srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(disk->src); @@ -487,8 +486,7 @@ qemuDomainAttachDiskGeneric(virConnectPtr conn,
static int -qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachVirtioDiskDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk) { @@ -499,7 +497,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn, if (qemuDomainEnsureVirtioAddress(&releaseaddr, vm, &dev, disk->dst) < 0) return -1;
- if ((rv = qemuDomainAttachDiskGeneric(conn, driver, vm, disk)) < 0) { + if ((rv = qemuDomainAttachDiskGeneric(driver, vm, disk)) < 0) { if (rv == -1 && releaseaddr) qemuDomainReleaseDeviceAddress(vm, &disk->info, disk->dst);
@@ -639,8 +637,7 @@ qemuDomainFindOrCreateSCSIDiskController(virQEMUDriverPtr driver,
static int -qemuDomainAttachSCSIDisk(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachSCSIDisk(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk) { @@ -666,7 +663,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, return -1; }
- if (qemuDomainAttachDiskGeneric(conn, driver, vm, disk) < 0) + if (qemuDomainAttachDiskGeneric(driver, vm, disk) < 0) return -1;
return 0; @@ -674,8 +671,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn,
static int -qemuDomainAttachUSBMassStorageDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachUSBMassStorageDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDiskDefPtr disk) { @@ -686,7 +682,7 @@ qemuDomainAttachUSBMassStorageDevice(virConnectPtr conn, return -1; }
- if (qemuDomainAttachDiskGeneric(conn, driver, vm, disk) < 0) { + if (qemuDomainAttachDiskGeneric(driver, vm, disk) < 0) { virDomainUSBAddressRelease(priv->usbaddrs, &disk->info); return -1; } @@ -696,8 +692,7 @@ qemuDomainAttachUSBMassStorageDevice(virConnectPtr conn,
int -qemuDomainAttachDeviceDiskLive(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachDeviceDiskLive(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev) { @@ -761,15 +756,15 @@ qemuDomainAttachDeviceDiskLive(virConnectPtr conn, _("disk device='lun' is not supported for usb bus")); break; } - ret = qemuDomainAttachUSBMassStorageDevice(conn, driver, vm, disk); + ret = qemuDomainAttachUSBMassStorageDevice(driver, vm, disk); break;
case VIR_DOMAIN_DISK_BUS_VIRTIO: - ret = qemuDomainAttachVirtioDiskDevice(conn, driver, vm, disk); + ret = qemuDomainAttachVirtioDiskDevice(driver, vm, disk); break;
case VIR_DOMAIN_DISK_BUS_SCSI: - ret = qemuDomainAttachSCSIDisk(conn, driver, vm, disk); + ret = qemuDomainAttachSCSIDisk(driver, vm, disk); break;
case VIR_DOMAIN_DISK_BUS_IDE: @@ -954,11 +949,8 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, * as a hostdev (the hostdev code will reach over into the * netdev-specific code as appropriate), then also added to * the nets list (see cleanup:) if successful. - * - * qemuDomainAttachHostDevice uses a connection to resolve - * a SCSI hostdev secret, which is not this case, so pass NULL. */ - ret = qemuDomainAttachHostDevice(NULL, driver, vm, + ret = qemuDomainAttachHostDevice(driver, vm, virDomainNetGetActualHostdev(net)); goto cleanup; break; @@ -1519,8 +1511,7 @@ qemuDomainGetTLSObjects(virQEMUCapsPtr qemuCaps,
static int -qemuDomainAddChardevTLSObjects(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAddChardevTLSObjects(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainChrSourceDefPtr dev, char *devAlias, @@ -1545,7 +1536,7 @@ qemuDomainAddChardevTLSObjects(virConnectPtr conn, goto cleanup; }
- if (qemuDomainSecretChardevPrepare(conn, cfg, priv, devAlias, dev) < 0) + if (qemuDomainSecretChardevPrepare(cfg, priv, devAlias, dev) < 0) goto cleanup;
if ((chrSourcePriv = QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev))) @@ -1623,8 +1614,7 @@ qemuDomainDelChardevTLSObjects(virQEMUDriverPtr driver, }
-int qemuDomainAttachRedirdevDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainRedirdevDefPtr redirdev) { @@ -1655,7 +1645,7 @@ int qemuDomainAttachRedirdevDevice(virConnectPtr conn, if (VIR_REALLOC_N(def->redirdevs, def->nredirdevs+1) < 0) goto cleanup;
- if (qemuDomainAddChardevTLSObjects(conn, driver, vm, redirdev->source, + if (qemuDomainAddChardevTLSObjects(driver, vm, redirdev->source, redirdev->info.alias, charAlias, &tlsAlias, &secAlias) < 0) goto audit; @@ -1861,8 +1851,7 @@ qemuDomainAttachChrDeviceAssignAddr(virDomainObjPtr vm, return 0; }
-int qemuDomainAttachChrDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachChrDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainChrDefPtr chr) { @@ -1914,7 +1903,7 @@ int qemuDomainAttachChrDevice(virConnectPtr conn, if (qemuDomainChrPreInsert(vmdef, chr) < 0) goto cleanup;
- if (qemuDomainAddChardevTLSObjects(conn, driver, vm, dev, + if (qemuDomainAddChardevTLSObjects(driver, vm, dev, chr->info.alias, charAlias, &tlsAlias, &secAlias) < 0) goto audit; @@ -1969,8 +1958,7 @@ int qemuDomainAttachChrDevice(virConnectPtr conn,
int -qemuDomainAttachRNGDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachRNGDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainRNGDefPtr rng) { @@ -2024,7 +2012,7 @@ qemuDomainAttachRNGDevice(virConnectPtr conn, goto cleanup;
if (rng->backend == VIR_DOMAIN_RNG_BACKEND_EGD) { - if (qemuDomainAddChardevTLSObjects(conn, driver, vm, + if (qemuDomainAddChardevTLSObjects(driver, vm, rng->source.chardev, rng->info.alias, charAlias, &tlsAlias, &secAlias) < 0) @@ -2325,8 +2313,7 @@ qemuDomainAttachHostUSBDevice(virQEMUDriverPtr driver,
static int -qemuDomainAttachHostSCSIDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev) { @@ -2383,7 +2370,7 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, if (qemuAssignDeviceHostdevAlias(vm->def, &hostdev->info->alias, -1) < 0) goto cleanup;
- if (qemuDomainSecretHostdevPrepare(conn, priv, hostdev) < 0) + if (qemuDomainSecretHostdevPrepare(priv, hostdev) < 0) goto cleanup;
if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { @@ -2585,8 +2572,7 @@ qemuDomainAttachSCSIVHostDevice(virQEMUDriverPtr driver,
int -qemuDomainAttachHostDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuDomainAttachHostDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev) { @@ -2611,7 +2597,7 @@ qemuDomainAttachHostDevice(virConnectPtr conn, break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: - if (qemuDomainAttachHostSCSIDevice(conn, driver, vm, + if (qemuDomainAttachHostSCSIDevice(driver, vm, hostdev) < 0) goto error; break; diff --git a/src/qemu/qemu_hotplug.h b/src/qemu/qemu_hotplug.h index 9a0c057f19..b2f5fa688b 100644 --- a/src/qemu/qemu_hotplug.h +++ b/src/qemu/qemu_hotplug.h @@ -62,19 +62,16 @@ int qemuDomainGetTLSObjects(virQEMUCapsPtr qemuCaps, int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainControllerDefPtr controller); -int qemuDomainAttachDeviceDiskLive(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachDeviceDiskLive(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainDeviceDefPtr dev); int qemuDomainAttachNetDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainNetDefPtr net); -int qemuDomainAttachRedirdevDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainRedirdevDefPtr hostdev); -int qemuDomainAttachHostDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachHostDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev); int qemuDomainAttachShmemDevice(virQEMUDriverPtr driver, @@ -140,15 +137,13 @@ int qemuDomainAttachLease(virQEMUDriverPtr driver, int qemuDomainDetachLease(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainLeaseDefPtr lease); -int qemuDomainAttachChrDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachChrDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainChrDefPtr chr); int qemuDomainDetachChrDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainChrDefPtr chr); -int qemuDomainAttachRNGDevice(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuDomainAttachRNGDevice(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainRNGDefPtr rng); int qemuDomainDetachRNGDevice(virQEMUDriverPtr driver, diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 88639c71fc..d202e87fbe 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -128,7 +128,6 @@ qemuMigrationCheckTLSCreds(virQEMUDriverPtr driver,
/* qemuMigrationCheckSetupTLS - * @conn: Connection pointer * @driver: pointer to qemu driver * @vm: domain object * @cfg: configuration pointer @@ -144,8 +143,7 @@ qemuMigrationCheckTLSCreds(virQEMUDriverPtr driver, * Returns 0 on success, -1 on error/failure */ static int -qemuMigrationCheckSetupTLS(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuMigrationCheckSetupTLS(virQEMUDriverPtr driver, virQEMUDriverConfigPtr cfg, virDomainObjPtr vm, qemuDomainAsyncJob asyncJob) @@ -171,7 +169,7 @@ qemuMigrationCheckSetupTLS(virConnectPtr conn, /* If there's a secret, then grab/store it now using the connection */ if (cfg->migrateTLSx509secretUUID && !(priv->migSecinfo = - qemuDomainSecretInfoTLSNew(conn, priv, QEMU_MIGRATION_TLS_ALIAS_BASE, + qemuDomainSecretInfoTLSNew(priv, QEMU_MIGRATION_TLS_ALIAS_BASE, cfg->migrateTLSx509secretUUID))) return -1;
@@ -2180,7 +2178,7 @@ qemuMigrationBegin(virConnectPtr conn,
if (flags & VIR_MIGRATE_TLS) { cfg = virQEMUDriverGetConfig(driver); - if (qemuMigrationCheckSetupTLS(conn, driver, cfg, vm, asyncJob) < 0) + if (qemuMigrationCheckSetupTLS(driver, cfg, vm, asyncJob) < 0) goto endjob; }
@@ -2788,7 +2786,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, * set the migration TLS parameters */ if (flags & VIR_MIGRATE_TLS) { cfg = virQEMUDriverGetConfig(driver); - if (qemuMigrationCheckSetupTLS(dconn, driver, cfg, vm, + if (qemuMigrationCheckSetupTLS(driver, cfg, vm, QEMU_ASYNC_JOB_MIGRATION_IN) < 0) goto stopjob;
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 586d11bba3..27454fb583 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -368,11 +368,11 @@ qemuProcessFindDomainDiskByAlias(virDomainObjPtr vm, }
static int -qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn, - virDomainDiskDefPtr disk, +qemuProcessGetVolumeQcowPassphrase(virDomainDiskDefPtr disk, char **secretRet, size_t *secretLen) { + virConnectPtr conn = NULL; char *passphrase; unsigned char *data; size_t size; @@ -387,19 +387,8 @@ qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn, } enc = disk->src->encryption;
- if (!conn) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "%s", _("cannot find secrets without a connection")); + if (!(conn = virGetConnectSecret())) goto cleanup; - } - - if (conn->secretDriver == NULL || - conn->secretDriver->secretLookupByUUID == NULL || - conn->secretDriver->secretGetValue == NULL) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("secret storage not supported")); - goto cleanup; - }
if (enc->format != VIR_STORAGE_ENCRYPTION_FORMAT_QCOW || enc->nsecrets != 1 || @@ -442,6 +431,7 @@ qemuProcessGetVolumeQcowPassphrase(virConnectPtr conn, ret = 0;
cleanup: + virObjectUnref(conn); return ret; }
@@ -453,7 +443,6 @@ qemuProcessFindVolumeQcowPassphrase(qemuMonitorPtr mon ATTRIBUTE_UNUSED, size_t *secretLen, void *opaque ATTRIBUTE_UNUSED) { - virConnectPtr conn = NULL; virDomainDiskDefPtr disk; int ret = -1;
@@ -465,11 +454,9 @@ qemuProcessFindVolumeQcowPassphrase(qemuMonitorPtr mon ATTRIBUTE_UNUSED, goto cleanup; }
- conn = virGetConnectSecret(); - ret = qemuProcessGetVolumeQcowPassphrase(conn, disk, secretRet, secretLen); + ret = qemuProcessGetVolumeQcowPassphrase(disk, secretRet, secretLen);
cleanup: - virObjectUnref(conn); virObjectUnlock(vm); return ret; } @@ -2567,8 +2554,7 @@ qemuProcessResctrlCreate(virQEMUDriverPtr driver,
static int -qemuProcessInitPasswords(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessInitPasswords(virQEMUDriverPtr driver, virDomainObjPtr vm, int asyncJob) { @@ -2613,8 +2599,7 @@ qemuProcessInitPasswords(virConnectPtr conn, continue;
VIR_FREE(secret); - if (qemuProcessGetVolumeQcowPassphrase(conn, - vm->def->disks[i], + if (qemuProcessGetVolumeQcowPassphrase(vm->def->disks[i], &secret, &secretLen) < 0) goto cleanup;
@@ -5589,8 +5574,7 @@ qemuProcessPrepareDomainNUMAPlacement(virDomainObjPtr vm,
static int -qemuProcessPrepareDomainStorage(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessPrepareDomainStorage(virQEMUDriverPtr driver, virDomainObjPtr vm, qemuDomainObjPrivatePtr priv, virQEMUDriverConfigPtr cfg, @@ -5611,7 +5595,7 @@ qemuProcessPrepareDomainStorage(virConnectPtr conn, continue; }
- if (qemuDomainPrepareDiskSource(conn, disk, priv, cfg) < 0) + if (qemuDomainPrepareDiskSource(disk, priv, cfg) < 0) return -1; }
@@ -5722,14 +5706,14 @@ qemuProcessPrepareDomain(virConnectPtr conn, goto cleanup;
VIR_DEBUG("Setting up storage"); - if (qemuProcessPrepareDomainStorage(conn, driver, vm, priv, cfg, flags) < 0) + if (qemuProcessPrepareDomainStorage(driver, vm, priv, cfg, flags) < 0) goto cleanup;
VIR_DEBUG("Prepare chardev source backends for TLS"); qemuDomainPrepareChardevSource(vm->def, cfg);
VIR_DEBUG("Add secrets to hostdevs and chardevs"); - if (qemuDomainSecretPrepare(conn, driver, vm) < 0) + if (qemuDomainSecretPrepare(driver, vm) < 0) goto cleanup;
for (i = 0; i < vm->def->nchannels; i++) { @@ -6180,7 +6164,7 @@ qemuProcessLaunch(virConnectPtr conn, goto cleanup;
VIR_DEBUG("Setting any required VM passwords"); - if (qemuProcessInitPasswords(conn, driver, vm, asyncJob) < 0) + if (qemuProcessInitPasswords(driver, vm, asyncJob) < 0) goto cleanup;
/* set default link states */ diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index 63bfe44145..d42f8e12cb 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -120,10 +120,10 @@ testQemuHotplugAttach(virDomainObjPtr vm, /* conn in only used for storage pool and secrets lookup so as long * as we don't use any of them, passing NULL should be safe */ - ret = qemuDomainAttachDeviceDiskLive(NULL, &driver, vm, dev); + ret = qemuDomainAttachDeviceDiskLive(&driver, vm, dev); break; case VIR_DOMAIN_DEVICE_CHR: - ret = qemuDomainAttachChrDevice(NULL, &driver, vm, dev->data.chr); + ret = qemuDomainAttachChrDevice(&driver, vm, dev->data.chr); break; case VIR_DOMAIN_DEVICE_SHMEM: ret = qemuDomainAttachShmemDevice(&driver, vm, dev->data.shmem);

When setting up graphics, we sometimes need to resolve networks, requiring the caller to pass in a virConnectPtr, except sometimes they pass in NULL. Use virGetConnectNetwork() to acquire the connection to the network driver when it is needed. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_migration.c | 2 +- src/qemu/qemu_process.c | 38 ++++++++++++++++++-------------------- src/qemu/qemu_process.h | 6 ++---- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 4533996201..c44b1f8793 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7222,7 +7222,7 @@ static char *qemuConnectDomainXMLToNative(virConnectPtr conn, net->script = script; } - if (!(cmd = qemuProcessCreatePretendCmd(conn, driver, vm, NULL, + if (!(cmd = qemuProcessCreatePretendCmd(driver, vm, NULL, qemuCheckFips(), true, VIR_QEMU_PROCESS_START_COLD))) goto cleanup; diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index d202e87fbe..312d717617 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2752,7 +2752,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, dataFD[0]))) goto stopjob; - if (qemuProcessPrepareDomain(dconn, driver, vm, startFlags) < 0) + if (qemuProcessPrepareDomain(driver, vm, startFlags) < 0) goto stopjob; if (qemuProcessPrepareHost(driver, vm, startFlags) < 0) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 27454fb583..703d62d3e9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4327,10 +4327,10 @@ qemuProcessGraphicsAllocatePorts(virQEMUDriverPtr driver, } static int -qemuProcessGetNetworkAddress(virConnectPtr conn, - const char *netname, +qemuProcessGetNetworkAddress(const char *netname, char **netaddr) { + virConnectPtr conn = NULL; int ret = -1; virNetworkPtr net; virNetworkDefPtr netdef = NULL; @@ -4341,6 +4341,10 @@ qemuProcessGetNetworkAddress(virConnectPtr conn, char *xml = NULL; *netaddr = NULL; + + if (!(conn = virGetConnectNetwork())) + return -1; + net = virNetworkLookupByName(conn, netname); if (!net) goto cleanup; @@ -4407,14 +4411,14 @@ qemuProcessGetNetworkAddress(virConnectPtr conn, cleanup: virNetworkDefFree(netdef); virObjectUnref(net); + virObjectUnref(conn); VIR_FREE(xml); return ret; } static int -qemuProcessGraphicsSetupNetworkAddress(virConnectPtr conn, - virDomainGraphicsListenDefPtr glisten, +qemuProcessGraphicsSetupNetworkAddress(virDomainGraphicsListenDefPtr glisten, const char *listenAddr) { int rc; @@ -4426,7 +4430,7 @@ qemuProcessGraphicsSetupNetworkAddress(virConnectPtr conn, return 0; } - rc = qemuProcessGetNetworkAddress(conn, glisten->network, &glisten->address); + rc = qemuProcessGetNetworkAddress(glisten->network, &glisten->address); if (rc <= -2) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("network-based listen isn't possible, " @@ -4441,8 +4445,7 @@ qemuProcessGraphicsSetupNetworkAddress(virConnectPtr conn, static int -qemuProcessGraphicsSetupListen(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessGraphicsSetupListen(virQEMUDriverPtr driver, virDomainGraphicsDefPtr graphics, virDomainObjPtr vm) { @@ -4500,8 +4503,7 @@ qemuProcessGraphicsSetupListen(virConnectPtr conn, if (glisten->address || !listenAddr) continue; - if (qemuProcessGraphicsSetupNetworkAddress(conn, - glisten, + if (qemuProcessGraphicsSetupNetworkAddress(glisten, listenAddr) < 0) goto cleanup; break; @@ -4530,8 +4532,7 @@ qemuProcessGraphicsSetupListen(virConnectPtr conn, static int -qemuProcessSetupGraphics(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessSetupGraphics(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags) { @@ -4543,7 +4544,7 @@ qemuProcessSetupGraphics(virConnectPtr conn, for (i = 0; i < vm->def->ngraphics; i++) { graphics = vm->def->graphics[i]; - if (qemuProcessGraphicsSetupListen(conn, driver, graphics, vm) < 0) + if (qemuProcessGraphicsSetupListen(driver, graphics, vm) < 0) goto cleanup; } @@ -5625,7 +5626,6 @@ qemuProcessPrepareAllowReboot(virDomainObjPtr vm) /** * qemuProcessPrepareDomain: - * @conn: connection object (for looking up storage volumes) * @driver: qemu driver * @vm: domain object * @flags: qemuProcessStartFlags @@ -5640,8 +5640,7 @@ qemuProcessPrepareAllowReboot(virDomainObjPtr vm) * TODO: move all XML modification from qemuBuildCommandLine into this function */ int -qemuProcessPrepareDomain(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessPrepareDomain(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags) { @@ -5698,7 +5697,7 @@ qemuProcessPrepareDomain(virConnectPtr conn, goto cleanup; VIR_DEBUG("Setting graphics devices"); - if (qemuProcessSetupGraphics(conn, driver, vm, flags) < 0) + if (qemuProcessSetupGraphics(driver, vm, flags) < 0) goto cleanup; VIR_DEBUG("Create domain masterKey"); @@ -6329,7 +6328,7 @@ qemuProcessStart(virConnectPtr conn, goto stop; } - if (qemuProcessPrepareDomain(conn, driver, vm, flags) < 0) + if (qemuProcessPrepareDomain(driver, vm, flags) < 0) goto stop; if (qemuProcessPrepareHost(driver, vm, flags) < 0) @@ -6386,8 +6385,7 @@ qemuProcessStart(virConnectPtr conn, virCommandPtr -qemuProcessCreatePretendCmd(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessCreatePretendCmd(virQEMUDriverPtr driver, virDomainObjPtr vm, const char *migrateURI, bool enableFips, @@ -6407,7 +6405,7 @@ qemuProcessCreatePretendCmd(virConnectPtr conn, !!migrateURI, flags) < 0) goto cleanup; - if (qemuProcessPrepareDomain(conn, driver, vm, flags) < 0) + if (qemuProcessPrepareDomain(driver, vm, flags) < 0) goto cleanup; VIR_DEBUG("Building emulator command line"); diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index 42f92eb458..1bc1203c18 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -92,8 +92,7 @@ int qemuProcessStart(virConnectPtr conn, virNetDevVPortProfileOp vmop, unsigned int flags); -virCommandPtr qemuProcessCreatePretendCmd(virConnectPtr conn, - virQEMUDriverPtr driver, +virCommandPtr qemuProcessCreatePretendCmd(virQEMUDriverPtr driver, virDomainObjPtr vm, const char *migrateURI, bool enableFips, @@ -107,8 +106,7 @@ int qemuProcessInit(virQEMUDriverPtr driver, bool migration, unsigned int flags); -int qemuProcessPrepareDomain(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuProcessPrepareDomain(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags); -- 2.14.3

On 02/09/2018 12:24 PM, Daniel P. Berrangé wrote:
When setting up graphics, we sometimes need to resolve networks, requiring the caller to pass in a virConnectPtr, except sometimes they pass in NULL. Use virGetConnectNetwork() to acquire the connection to the network driver when it is needed.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_driver.c | 2 +- src/qemu/qemu_migration.c | 2 +- src/qemu/qemu_process.c | 38 ++++++++++++++++++-------------------- src/qemu/qemu_process.h | 6 ++---- 4 files changed, 22 insertions(+), 26 deletions(-)
and qemuxml2argvtest fails to compile here... John
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 4533996201..c44b1f8793 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -7222,7 +7222,7 @@ static char *qemuConnectDomainXMLToNative(virConnectPtr conn, net->script = script; }
- if (!(cmd = qemuProcessCreatePretendCmd(conn, driver, vm, NULL, + if (!(cmd = qemuProcessCreatePretendCmd(driver, vm, NULL, qemuCheckFips(), true, VIR_QEMU_PROCESS_START_COLD))) goto cleanup; diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index d202e87fbe..312d717617 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2752,7 +2752,7 @@ qemuMigrationPrepareAny(virQEMUDriverPtr driver, dataFD[0]))) goto stopjob;
- if (qemuProcessPrepareDomain(dconn, driver, vm, startFlags) < 0) + if (qemuProcessPrepareDomain(driver, vm, startFlags) < 0) goto stopjob;
if (qemuProcessPrepareHost(driver, vm, startFlags) < 0) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 27454fb583..703d62d3e9 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4327,10 +4327,10 @@ qemuProcessGraphicsAllocatePorts(virQEMUDriverPtr driver, }
static int -qemuProcessGetNetworkAddress(virConnectPtr conn, - const char *netname, +qemuProcessGetNetworkAddress(const char *netname, char **netaddr) { + virConnectPtr conn = NULL; int ret = -1; virNetworkPtr net; virNetworkDefPtr netdef = NULL; @@ -4341,6 +4341,10 @@ qemuProcessGetNetworkAddress(virConnectPtr conn, char *xml = NULL;
*netaddr = NULL; + + if (!(conn = virGetConnectNetwork())) + return -1; + net = virNetworkLookupByName(conn, netname); if (!net) goto cleanup; @@ -4407,14 +4411,14 @@ qemuProcessGetNetworkAddress(virConnectPtr conn, cleanup: virNetworkDefFree(netdef); virObjectUnref(net); + virObjectUnref(conn); VIR_FREE(xml); return ret; }
static int -qemuProcessGraphicsSetupNetworkAddress(virConnectPtr conn, - virDomainGraphicsListenDefPtr glisten, +qemuProcessGraphicsSetupNetworkAddress(virDomainGraphicsListenDefPtr glisten, const char *listenAddr) { int rc; @@ -4426,7 +4430,7 @@ qemuProcessGraphicsSetupNetworkAddress(virConnectPtr conn, return 0; }
- rc = qemuProcessGetNetworkAddress(conn, glisten->network, &glisten->address); + rc = qemuProcessGetNetworkAddress(glisten->network, &glisten->address); if (rc <= -2) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("network-based listen isn't possible, " @@ -4441,8 +4445,7 @@ qemuProcessGraphicsSetupNetworkAddress(virConnectPtr conn,
static int -qemuProcessGraphicsSetupListen(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessGraphicsSetupListen(virQEMUDriverPtr driver, virDomainGraphicsDefPtr graphics, virDomainObjPtr vm) { @@ -4500,8 +4503,7 @@ qemuProcessGraphicsSetupListen(virConnectPtr conn, if (glisten->address || !listenAddr) continue;
- if (qemuProcessGraphicsSetupNetworkAddress(conn, - glisten, + if (qemuProcessGraphicsSetupNetworkAddress(glisten, listenAddr) < 0) goto cleanup; break; @@ -4530,8 +4532,7 @@ qemuProcessGraphicsSetupListen(virConnectPtr conn,
static int -qemuProcessSetupGraphics(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessSetupGraphics(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags) { @@ -4543,7 +4544,7 @@ qemuProcessSetupGraphics(virConnectPtr conn, for (i = 0; i < vm->def->ngraphics; i++) { graphics = vm->def->graphics[i];
- if (qemuProcessGraphicsSetupListen(conn, driver, graphics, vm) < 0) + if (qemuProcessGraphicsSetupListen(driver, graphics, vm) < 0) goto cleanup; }
@@ -5625,7 +5626,6 @@ qemuProcessPrepareAllowReboot(virDomainObjPtr vm)
/** * qemuProcessPrepareDomain: - * @conn: connection object (for looking up storage volumes) * @driver: qemu driver * @vm: domain object * @flags: qemuProcessStartFlags @@ -5640,8 +5640,7 @@ qemuProcessPrepareAllowReboot(virDomainObjPtr vm) * TODO: move all XML modification from qemuBuildCommandLine into this function */ int -qemuProcessPrepareDomain(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessPrepareDomain(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags) { @@ -5698,7 +5697,7 @@ qemuProcessPrepareDomain(virConnectPtr conn, goto cleanup;
VIR_DEBUG("Setting graphics devices"); - if (qemuProcessSetupGraphics(conn, driver, vm, flags) < 0) + if (qemuProcessSetupGraphics(driver, vm, flags) < 0) goto cleanup;
VIR_DEBUG("Create domain masterKey"); @@ -6329,7 +6328,7 @@ qemuProcessStart(virConnectPtr conn, goto stop; }
- if (qemuProcessPrepareDomain(conn, driver, vm, flags) < 0) + if (qemuProcessPrepareDomain(driver, vm, flags) < 0) goto stop;
if (qemuProcessPrepareHost(driver, vm, flags) < 0) @@ -6386,8 +6385,7 @@ qemuProcessStart(virConnectPtr conn,
virCommandPtr -qemuProcessCreatePretendCmd(virConnectPtr conn, - virQEMUDriverPtr driver, +qemuProcessCreatePretendCmd(virQEMUDriverPtr driver, virDomainObjPtr vm, const char *migrateURI, bool enableFips, @@ -6407,7 +6405,7 @@ qemuProcessCreatePretendCmd(virConnectPtr conn, !!migrateURI, flags) < 0) goto cleanup;
- if (qemuProcessPrepareDomain(conn, driver, vm, flags) < 0) + if (qemuProcessPrepareDomain(driver, vm, flags) < 0) goto cleanup;
VIR_DEBUG("Building emulator command line"); diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index 42f92eb458..1bc1203c18 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -92,8 +92,7 @@ int qemuProcessStart(virConnectPtr conn, virNetDevVPortProfileOp vmop, unsigned int flags);
-virCommandPtr qemuProcessCreatePretendCmd(virConnectPtr conn, - virQEMUDriverPtr driver, +virCommandPtr qemuProcessCreatePretendCmd(virQEMUDriverPtr driver, virDomainObjPtr vm, const char *migrateURI, bool enableFips, @@ -107,8 +106,7 @@ int qemuProcessInit(virQEMUDriverPtr driver, bool migration, unsigned int flags);
-int qemuProcessPrepareDomain(virConnectPtr conn, - virQEMUDriverPtr driver, +int qemuProcessPrepareDomain(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags);

There's a few places in startup code paths which pass around a virConnectPtr which is no longer required. Specifically, the qemuProcessStart() method now only requires a non-NULL connection if autodestroy is requested. Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- src/qemu/qemu_driver.c | 35 +++++++---------------------------- src/qemu/qemu_process.c | 26 ++++++++------------------ src/qemu/qemu_process.h | 2 +- 3 files changed, 16 insertions(+), 47 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index c44b1f8793..c747b4319e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -181,12 +181,6 @@ static virNWFilterCallbackDriver qemuCallbackDriver = { }; -struct qemuAutostartData { - virQEMUDriverPtr driver; - virConnectPtr conn; -}; - - /** * qemuDomObjFromDomain: * @domain: Domain pointer that has to be looked up @@ -254,9 +248,9 @@ static int qemuAutostartDomain(virDomainObjPtr vm, void *opaque) { - struct qemuAutostartData *data = opaque; + virQEMUDriverPtr driver = opaque; int flags = 0; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(data->driver); + virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); int ret = -1; if (cfg->autoStartBypassCache) @@ -267,7 +261,7 @@ qemuAutostartDomain(virDomainObjPtr vm, virResetLastError(); if (vm->autostart && !virDomainObjIsActive(vm)) { - if (qemuProcessBeginJob(data->driver, vm, + if (qemuProcessBeginJob(driver, vm, VIR_DOMAIN_JOB_OPERATION_START) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to start job on VM '%s': %s"), @@ -275,14 +269,14 @@ qemuAutostartDomain(virDomainObjPtr vm, goto cleanup; } - if (qemuDomainObjStart(data->conn, data->driver, vm, flags, + if (qemuDomainObjStart(NULL, driver, vm, flags, QEMU_ASYNC_JOB_START) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to autostart VM '%s': %s"), vm->def->name, virGetLastErrorMessage()); } - qemuProcessEndJob(data->driver, vm); + qemuProcessEndJob(driver, vm); } ret = 0; @@ -297,18 +291,9 @@ static void qemuAutostartDomains(virQEMUDriverPtr driver) { virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - /* XXX: Figure out a better way todo this. The domain - * startup code needs a connection handle in order - * to lookup the bridge associated with a virtual - * network - */ - virConnectPtr conn = virConnectOpen(cfg->uri); - /* Ignoring NULL conn which is mostly harmless here */ - struct qemuAutostartData data = { driver, conn }; - virDomainObjListForEach(driver->domains, qemuAutostartDomain, &data); + virDomainObjListForEach(driver->domains, qemuAutostartDomain, driver); - virObjectUnref(conn); virObjectUnref(cfg); } @@ -623,7 +608,6 @@ qemuStateInitialize(bool privileged, void *opaque) { char *driverConf = NULL; - virConnectPtr conn = NULL; virQEMUDriverConfigPtr cfg; uid_t run_uid = -1; gid_t run_gid = -1; @@ -933,8 +917,6 @@ qemuStateInitialize(bool privileged, qemuDomainNetsRestart, NULL); - conn = virConnectOpen(cfg->uri); - /* Then inactive persistent configs */ if (virDomainObjListLoadAllConfigs(qemu_driver->domains, cfg->configDir, @@ -952,19 +934,16 @@ qemuStateInitialize(bool privileged, qemuDomainManagedSaveLoad, qemu_driver); - qemuProcessReconnectAll(conn, qemu_driver); + qemuProcessReconnectAll(qemu_driver); qemu_driver->workerPool = virThreadPoolNew(0, 1, 0, qemuProcessEventHandler, qemu_driver); if (!qemu_driver->workerPool) goto error; - virObjectUnref(conn); - virNWFilterRegisterCallbackDriver(&qemuCallbackDriver); return 0; error: - virObjectUnref(conn); VIR_FREE(driverConf); VIR_FREE(hugepagePath); VIR_FREE(memoryBackingPath); diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 703d62d3e9..77c93bedab 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2749,7 +2749,6 @@ qemuProcessUpdateVideoRamSize(virQEMUDriverPtr driver, struct qemuProcessHookData { - virConnectPtr conn; virDomainObjPtr vm; virQEMUDriverPtr driver; virQEMUDriverConfigPtr cfg; @@ -5937,7 +5936,12 @@ qemuProcessLaunch(virConnectPtr conn, cfg = virQEMUDriverGetConfig(driver); - hookData.conn = conn; + if ((flags & VIR_QEMU_PROCESS_START_AUTODESTROY) && !conn) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Domain autodestroy requirs a connection handle")); + return -1; + } + hookData.vm = vm; hookData.driver = driver; /* We don't increase cfg's reference counter here. */ @@ -7246,7 +7250,6 @@ qemuProcessRefreshCPU(virQEMUDriverPtr driver, struct qemuProcessReconnectData { - virConnectPtr conn; virQEMUDriverPtr driver; virDomainObjPtr obj; }; @@ -7254,10 +7257,6 @@ struct qemuProcessReconnectData { * Open an existing VM's monitor, re-detect VCPU threads * and re-reserve the security labels in use * - * We own the virConnectPtr we are passed here - whoever started - * this thread function has increased the reference counter to it - * so that we now have to close it. - * * This function also inherits a locked and ref'd domain object. * * This function needs to: @@ -7279,7 +7278,6 @@ qemuProcessReconnect(void *opaque) virQEMUDriverPtr driver = data->driver; virDomainObjPtr obj = data->obj; qemuDomainObjPrivatePtr priv; - virConnectPtr conn = data->conn; struct qemuDomainJobObj oldjob; int state; int reason; @@ -7501,7 +7499,6 @@ qemuProcessReconnect(void *opaque) qemuDomainRemoveInactiveJob(driver, obj); } virDomainObjEndAPI(&obj); - virObjectUnref(conn); virObjectUnref(cfg); virObjectUnref(caps); virNWFilterUnlockFilterUpdates(); @@ -7557,12 +7554,6 @@ qemuProcessReconnectHelper(virDomainObjPtr obj, virObjectLock(obj); virObjectRef(obj); - /* Since we close the connection later on, we have to make sure that the - * threads we start see a valid connection throughout their lifetime. We - * simply increase the reference counter here. - */ - virObjectRef(data->conn); - if (virThreadCreate(&thread, false, qemuProcessReconnect, data) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Could not create thread. QEMU initialization " @@ -7578,7 +7569,6 @@ qemuProcessReconnectHelper(virDomainObjPtr obj, virDomainObjEndAPI(&obj); virNWFilterUnlockFilterUpdates(); - virObjectUnref(data->conn); VIR_FREE(data); return -1; } @@ -7593,8 +7583,8 @@ qemuProcessReconnectHelper(virDomainObjPtr obj, * about. */ void -qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver) +qemuProcessReconnectAll(virQEMUDriverPtr driver) { - struct qemuProcessReconnectData data = {.conn = conn, .driver = driver}; + struct qemuProcessReconnectData data = {.driver = driver}; virDomainObjListForEach(driver->domains, qemuProcessReconnectHelper, &data); } diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index 1bc1203c18..2741115673 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -47,7 +47,7 @@ int qemuProcessDestroyMemoryBackingPath(virQEMUDriverPtr driver, virDomainMemoryDefPtr mem); void qemuProcessAutostartAll(virQEMUDriverPtr driver); -void qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver); +void qemuProcessReconnectAll(virQEMUDriverPtr driver); typedef struct _qemuProcessIncomingDef qemuProcessIncomingDef; typedef qemuProcessIncomingDef *qemuProcessIncomingDefPtr; -- 2.14.3
participants (2)
-
Daniel P. Berrangé
-
John Ferlan