diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index b301ac0a08..f26b72e6c7 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16089,6 +16089,7 @@ virDomainDiskControllerMatch(int controller_type, int disk_bus) int virDomainDiskIndexByAddress(virDomainDefPtr def, virPCIDeviceAddressPtr pci_address, + virDomainDeviceCCWAddressPtr ccw_addr, unsigned int bus, unsigned int target, unsigned int unit) { @@ -16105,6 +16106,11 @@ virDomainDiskIndexByAddress(virDomainDefPtr def, if (vdisk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI && virPCIDeviceAddressEqual(&vdisk->info.addr.pci, pci_address)) return i; + if (vdisk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW && + ccw_addr && + virDomainDeviceCCWAddressEqual(&vdisk->info.addr.ccw, ccw_addr)) { + return i; + } if (vdisk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) { virDomainDeviceDriveAddressPtr drive = &vdisk->info.addr.drive; if (controller && @@ -16121,11 +16127,13 @@ virDomainDiskIndexByAddress(virDomainDefPtr def, virDomainDiskDefPtr virDomainDiskByAddress(virDomainDefPtr def, virPCIDeviceAddressPtr pci_address, + virDomainDeviceCCWAddressPtr ccw_addr, unsigned int bus, unsigned int target, unsigned int unit) { - int idx = virDomainDiskIndexByAddress(def, pci_address, bus, target, unit); + int idx = virDomainDiskIndexByAddress(def, pci_address, ccw_addr, + bus, target, unit); return idx < 0 ? NULL : def->disks[idx]; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index ce8ed48a04..9944ecfa5f 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3378,10 +3378,12 @@ void virDomainRNGDefFree(virDomainRNGDefPtr def); int virDomainDiskIndexByAddress(virDomainDefPtr def, virPCIDeviceAddressPtr pci_controller, + virDomainDeviceCCWAddressPtr ccw_addr, unsigned int bus, unsigned int target, unsigned int unit); virDomainDiskDefPtr virDomainDiskByAddress(virDomainDefPtr def, virPCIDeviceAddressPtr pci_controller, + virDomainDeviceCCWAddressPtr ccw_addr, unsigned int bus, unsigned int target, unsigned int unit); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 9caaa07237..62b0852c33 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -18887,15 +18887,15 @@ qemuAgentFSInfoToPublic(qemuAgentFSInfoPtr agent, diskDef = virDomainDiskByAddress(vmdef, &agentdisk->pci_controller, + agentdisk->has_ccw_address ? + &agentdisk->ccw_addr : NULL, agentdisk->bus, agentdisk->target, agentdisk->unit); if (diskDef != NULL) ret->devAlias[i] = g_strdup(diskDef->dst); - else if (agentdisk->devnode != NULL) - ret->devAlias[i] = g_strdup(agentdisk->devnode); else - VIR_DEBUG("Missing devnode name for '%s'.", ret->mountpoint); + VIR_DEBUG("Missing target name for '%s'.", ret->mountpoint); } return ret; @@ -19931,6 +19931,8 @@ qemuAgentDiskInfoFormatParams(qemuAgentDiskInfoPtr *info, /* match the disk to the target in the vm definition */ diskdef = virDomainDiskByAddress(vmdef, &info[i]->address->pci_controller, + info[i]->address->has_ccw_address ? + &info[i]->address->ccw_addr : NULL, info[i]->address->bus, info[i]->address->target, info[i]->address->unit); @@ -20015,6 +20017,8 @@ qemuAgentFSInfoFormatParams(qemuAgentFSInfoPtr *fsinfo, /* match the disk to the target in the vm definition */ diskdef = virDomainDiskByAddress(vmdef, &d->pci_controller, + d->has_ccw_address ? + &d->ccw_addr : NULL, d->bus, d->target, d->unit);