mirror of https://gitee.com/openkylin/libvirt.git
qemu: Use disk wwn in qemu command line
All of ide-drive, ide-hd, ide-cd, scsi-disk, scsi-hd, and scsi-cd supports wwn property. (NB, scsi-block doesn't support to set wwn). * src/qemu/qemu_command.c: Error out if underlying QEMU doesn't support wwn property for the device; Set wwn for the device otherwise. * tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.args: New test * tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.xml: Likewise * tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.args: Likewise * tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.xml: Likewise * tests/qemuxml2argvtest.c: Add the new tests.
This commit is contained in:
parent
331934b296
commit
6e73850b01
|
@ -2453,6 +2453,15 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (disk->wwn) {
|
||||||
|
if ((disk->bus != VIR_DOMAIN_DISK_BUS_IDE) &&
|
||||||
|
(disk->bus != VIR_DOMAIN_DISK_BUS_SCSI)) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("Only ide and scsi disk support wwn"));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
|
if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
|
||||||
/* make sure that both the bus and the qemu binary support
|
/* make sure that both the bus and the qemu binary support
|
||||||
* type='lun' (SG_IO).
|
* type='lun' (SG_IO).
|
||||||
|
@ -2475,6 +2484,11 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
|
||||||
_("disk device='lun' is not supported by this QEMU"));
|
_("disk device='lun' is not supported by this QEMU"));
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
if (disk->wwn) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("Setting wwn is not supported for lun device"));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (disk->bus) {
|
switch (disk->bus) {
|
||||||
|
@ -2485,6 +2499,14 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (disk->wwn &&
|
||||||
|
!qemuCapsGet(caps, QEMU_CAPS_IDE_DRIVE_WWN)) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("Setting wwn for ide disk is not supported "
|
||||||
|
"by this QEMU"));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
if (qemuCapsGet(caps, QEMU_CAPS_IDE_CD)) {
|
if (qemuCapsGet(caps, QEMU_CAPS_IDE_CD)) {
|
||||||
if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM)
|
if (disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM)
|
||||||
virBufferAddLit(&opt, "ide-cd");
|
virBufferAddLit(&opt, "ide-cd");
|
||||||
|
@ -2508,6 +2530,14 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (disk->wwn &&
|
||||||
|
!qemuCapsGet(caps, QEMU_CAPS_SCSI_DISK_WWN)) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("Setting wwn for scsi disk is not supported "
|
||||||
|
"by this QEMU"));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
controllerModel =
|
controllerModel =
|
||||||
virDomainDiskFindControllerModel(def, disk,
|
virDomainDiskFindControllerModel(def, disk,
|
||||||
VIR_DOMAIN_CONTROLLER_TYPE_SCSI);
|
VIR_DOMAIN_CONTROLLER_TYPE_SCSI);
|
||||||
|
@ -2647,6 +2677,9 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
|
||||||
disk->blockio.physical_block_size);
|
disk->blockio.physical_block_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (disk->wwn)
|
||||||
|
virBufferAsprintf(&opt, ",wwn=%s", disk->wwn);
|
||||||
|
|
||||||
if (virBufferError(&opt)) {
|
if (virBufferError(&opt)) {
|
||||||
virReportOOMError();
|
virReportOOMError();
|
||||||
goto error;
|
goto error;
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \
|
||||||
|
/usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefaults \
|
||||||
|
-monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c \
|
||||||
|
-drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-ide0-0-1,serial=WD-WMAP9A966149 \
|
||||||
|
-device ide-hd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1,wwn=5000c50015ea71ad \
|
||||||
|
-usb -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
|
|
@ -0,0 +1,28 @@
|
||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219136</memory>
|
||||||
|
<currentMemory unit='KiB'>219136</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu</emulator>
|
||||||
|
<disk type='block' device='disk'>
|
||||||
|
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||||
|
<target dev='hda' bus='ide'/>
|
||||||
|
<serial>WD-WMAP9A966149</serial>
|
||||||
|
<wwn>5000c50015ea71ad</wwn>
|
||||||
|
<address type='drive' controller='0' bus='0' target='0' unit='1'/>
|
||||||
|
</disk>
|
||||||
|
<controller type='usb' index='0'/>
|
||||||
|
<controller type='ide' index='0'/>
|
||||||
|
<memballoon model='virtio'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
|
@ -0,0 +1,10 @@
|
||||||
|
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \
|
||||||
|
/usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults \
|
||||||
|
-monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c \
|
||||||
|
-device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x3 \
|
||||||
|
-device lsi,id=scsi1,bus=pci.0,addr=0x4 \
|
||||||
|
-drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-scsi0-0-1-0 \
|
||||||
|
-device scsi-cd,bus=scsi0.0,channel=0,scsi-id=1,lun=0,drive=drive-scsi0-0-1-0,id=scsi0-0-1-0,wwn=5000c50015ea71ac \
|
||||||
|
-drive file=/dev/HostVG/QEMUGuest2,if=none,id=drive-scsi0-0-0-0 \
|
||||||
|
-device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,wwn=5000c50015ea71ad \
|
||||||
|
-usb -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5
|
|
@ -0,0 +1,35 @@
|
||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219136</memory>
|
||||||
|
<currentMemory unit='KiB'>219136</currentMemory>
|
||||||
|
<vcpu placement='static'>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu</emulator>
|
||||||
|
<disk type='block' device='cdrom'>
|
||||||
|
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||||
|
<target dev='sda' bus='scsi'/>
|
||||||
|
<address type='drive' controller='0' bus='0' target='1' unit='0'/>
|
||||||
|
<serial>WD-WMAP9A966149</serial>
|
||||||
|
<wwn>5000c50015ea71ac</wwn>
|
||||||
|
</disk>
|
||||||
|
<disk type='block' device='disk'>
|
||||||
|
<source dev='/dev/HostVG/QEMUGuest2'/>
|
||||||
|
<target dev='sdb' bus='scsi'/>
|
||||||
|
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||||
|
<wwn>5000c50015ea71ad</wwn>
|
||||||
|
</disk>
|
||||||
|
<controller type='usb' index='0'/>
|
||||||
|
<controller type='scsi' index='0' model='virtio-scsi'/>
|
||||||
|
<controller type='scsi' index='1' model='lsilogic'/>
|
||||||
|
<memballoon model='virtio'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
|
@ -471,6 +471,10 @@ mymain(void)
|
||||||
DO_TEST("disk-scsi-disk-split",
|
DO_TEST("disk-scsi-disk-split",
|
||||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
||||||
QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI_PCI);
|
QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI_PCI);
|
||||||
|
DO_TEST("disk-scsi-disk-wwn",
|
||||||
|
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
||||||
|
QEMU_CAPS_SCSI_CD, QEMU_CAPS_SCSI_LSI, QEMU_CAPS_VIRTIO_SCSI_PCI,
|
||||||
|
QEMU_CAPS_SCSI_DISK_WWN);
|
||||||
DO_TEST("disk-scsi-vscsi",
|
DO_TEST("disk-scsi-vscsi",
|
||||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||||
DO_TEST("disk-scsi-virtio-scsi",
|
DO_TEST("disk-scsi-virtio-scsi",
|
||||||
|
@ -802,6 +806,9 @@ mymain(void)
|
||||||
DO_TEST("disk-ide-drive-split",
|
DO_TEST("disk-ide-drive-split",
|
||||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG,
|
||||||
QEMU_CAPS_IDE_CD);
|
QEMU_CAPS_IDE_CD);
|
||||||
|
DO_TEST("disk-ide-wwn",
|
||||||
|
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_IDE_CD,
|
||||||
|
QEMU_CAPS_DRIVE_SERIAL, QEMU_CAPS_IDE_DRIVE_WWN);
|
||||||
|
|
||||||
DO_TEST("disk-geometry", QEMU_CAPS_DRIVE);
|
DO_TEST("disk-geometry", QEMU_CAPS_DRIVE);
|
||||||
DO_TEST("disk-blockio",
|
DO_TEST("disk-blockio",
|
||||||
|
|
Loading…
Reference in New Issue