mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
qemu: Check duplicate WWNs also for hotplugged disks
In commit 714b38cb23
I tried to avoid
having two disks with the same WWN in a VM. I forgot to check the
hotplug paths though which make it possible bypass that check. Reinforce
the fix by checking the wwn when attaching the disk.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1208009
This commit is contained in:
parent
dd519a294b
commit
780fe4e4ba
@ -22135,6 +22135,34 @@ virDomainDeviceInfoCheckBootIndex(virDomainDefPtr def ATTRIBUTE_UNUSED,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virDomainDefGetDiskByWWN:
|
||||||
|
* @def: domain definition
|
||||||
|
* @wwn: wwn of a disk to find
|
||||||
|
*
|
||||||
|
* Returns a disk definition pointer corresponding to the given WWN identifier
|
||||||
|
* or NULL either if @wwn was NULL or if disk with given WWN is not present in
|
||||||
|
* the domain definition.
|
||||||
|
*/
|
||||||
|
static virDomainDiskDefPtr
|
||||||
|
virDomainDefGetDiskByWWN(virDomainDefPtr def,
|
||||||
|
const char *wwn)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if (!wwn)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < def->ndisks; i++) {
|
||||||
|
if (STREQ_NULLABLE(def->disks[i]->wwn, wwn))
|
||||||
|
return def->disks[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
virDomainDefCompatibleDevice(virDomainDefPtr def,
|
virDomainDefCompatibleDevice(virDomainDefPtr def,
|
||||||
virDomainDeviceDefPtr dev,
|
virDomainDeviceDefPtr dev,
|
||||||
@ -22178,6 +22206,15 @@ virDomainDefCompatibleDevice(virDomainDefPtr def,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dev->type == VIR_DOMAIN_DEVICE_DISK) {
|
||||||
|
if (!!virDomainDefGetDiskByWWN(def, dev->data.disk->wwn)) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
_("Domain already has a disk with wwn '%s'"),
|
||||||
|
dev->data.disk->wwn);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user