diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index 813fb0bd60..bccda292a2 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -2787,6 +2787,7 @@ returned: * ``disk..partition`` - whether this is a partition or disk * ``disk..dependency.count`` - the number of device dependencies * ``disk..dependency..name`` - a dependency name +* ``disk..serial`` - optional disk serial number * ``disk..alias`` - the device alias of the disk (e.g. sda) * ``disk..guest_alias`` - optional alias assigned to the disk diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 83ff7df9fe..509b7a6d88 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -12561,6 +12561,7 @@ virDomainSetVcpu(virDomainPtr domain, * hold the list of PVs, for LUKS encrypted volume this will * contain the disk where the volume is placed. (Linux) * "disk..dependency..name" - a dependency + * "disk..serial" - optional disk serial number (as string) * "disk..alias" - the device alias of the disk (e.g. sda) * "disk..guest_alias" - optional alias assigned to the disk, on Linux * this is a name assigned by device mapper diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 90b5477f00..88ee9e5d5e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -19951,15 +19951,24 @@ qemuAgentDiskInfoFormatParams(qemuAgentDiskInfo **info, } if (info[i]->address) { + qemuAgentDiskAddress *address = info[i]->address; virDomainDiskDef *diskdef = NULL; + if (address->serial) { + g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH, + "disk.%zu.serial", i); + if (virTypedParamsAddString(params, nparams, maxparams, + param_name, address->serial) < 0) + return; + } + /* match the disk to the target in the vm definition */ diskdef = virDomainDiskByAddress(vmdef, - &info[i]->address->pci_controller, - info[i]->address->ccw_addr, - info[i]->address->bus, - info[i]->address->target, - info[i]->address->unit); + &address->pci_controller, + address->ccw_addr, + address->bus, + address->target, + address->unit); if (diskdef) { g_snprintf(param_name, VIR_TYPED_PARAM_FIELD_LENGTH, "disk.%zu.alias", i);