Bug 1168849
| Summary: | libvirt rejects virtio-scsi options when model is not specified | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Hu Jianwei <jiahu> |
| Component: | libvirt | Assignee: | Ján Tomko <jtomko> |
| Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> |
| Severity: | medium | Docs Contact: | |
| Priority: | medium | ||
| Version: | 7.1 | CC: | dyuan, honzhang, lhuang, mzhan, rbalakri |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Fixed In Version: | libvirt-1.2.13-1.el7 | Doc Type: | Bug Fix |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2015-11-19 05:56:46 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
Upstream patch:
commit 52a166f493970f0eb2b9c96ac3544904564e209b
Author: Ján Tomko <jtomko>
CommitDate: 2015-02-25 10:04:58 +0100
Assign default SCSI controller model before checking attribute validity
If the qemu binary on x86 does not support lsi SCSI controller,
but it supports virtio-scsi, we reject the virtio-specific attributes
for no reason.
Move the default controller assignment before the check.
https://bugzilla.redhat.com/show_bug.cgi?id=1168849
git describe: v1.2.13-rc1-8-g52a166f
Verified as below: [root@localhost ~]# rpm -q libvirt qemu-kvm-rhev libvirt-1.2.14-1.el7.x86_64 qemu-kvm-rhev-2.2.0-8.el7.x86_64 <1> No model element [root@localhost ~]# virsh dumpxml r71| grep "<controller type='scsi' index='0'>" -b4 1095- <source file='/var/lib/libvirt/images/r71_gpt.img'/> 1154- <target dev='sda' bus='usb'/> 1190- <address type='usb' bus='0' port='5'/> 1235- </disk> 1247: <controller type='scsi' index='0'> 1286- <driver queues='5'/> 1313- <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> 1395- </controller> 1413- <controller type='usb' index='0' model='ich9-ehci1'> [root@localhost ~]# virsh start r71 Domain r71 started [root@localhost ~]# ps aux | grep r71 | grep num_queues=5 qemu 12223 96.9 2.3 1694976 183540 ? Sl 11:18 0:17 /usr/libexec/qemu-kvm -name r71 -S -machine pc-i440fx-rhel7.1.0,accel=kvm,usb=off -cpu SandyBridge -drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on -drive file=/var/lib/libvirt/qemu/nvram/r71_VARS.fd,if=pflash,format=raw,unit=1 -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 1cc0e9e3-8383-42a8-a77d-9dbfa7d10fd7 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/r71.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x6.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x6 -device virtio-scsi-pci,id=scsi0,num_queues=5,... <2> when model = "auto": [root@localhost ~]# virsh dumpxml r71| grep "<controller type='scsi' index='0'" -b4 1095- <source file='/var/lib/libvirt/images/r71_gpt.img'/> 1154- <target dev='sda' bus='usb'/> 1190- <address type='usb' bus='0' port='5'/> 1235- </disk> 1247: <controller type='scsi' index='0' model='auto'> 1299- <driver queues='5'/> 1326- <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> 1408- </controller> 1426- <controller type='usb' index='0' model='ich9-ehci1'> [root@localhost ~]# virsh start r71 Domain r71 started [root@localhost ~]# /usr/libexec/qemu-kvm -device -h^C [root@localhost ~]# virsh dumpxml r71| grep "<controller type='scsi' index='0'" -b4 1247- <target dev='sda' bus='usb'/> 1283- <alias name='usb-disk0'/> 1315- <address type='usb' bus='0' port='5'/> 1360- </disk> 1372: <controller type='scsi' index='0' model='auto'> 1424- <driver queues='5'/> 1451- <alias name='scsi0'/> 1479- <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> 1561- </controller> [root@localhost ~]# ps aux | grep r71 | grep num_queues=5 qemu 12415 102 2.3 1694976 183700 ? Sl 11:22 0:17 /usr/libexec/qemu-kvm -name r71 -S -machine pc-i440fx-rhel7.1.0,accel=kvm,usb=off -cpu SandyBridge -drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on -drive file=/var/lib/libvirt/qemu/nvram/r71_VARS.fd,if=pflash,format=raw,unit=1 -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 1cc0e9e3-8383-42a8-a77d-9dbfa7d10fd7 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/r71.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x6.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x6 -device virtio-scsi-pci,id=scsi0,num_queues=5,... <3> When model = "virtio-scsi": [root@localhost ~]# virsh dumpxml r71| grep "<controller type='scsi' index='0'" -b4 1095- <source file='/var/lib/libvirt/images/r71_gpt.img'/> 1154- <target dev='sda' bus='usb'/> 1190- <address type='usb' bus='0' port='5'/> 1235- </disk> 1247: <controller type='scsi' index='0' model='virtio-scsi'> 1306- <driver queues='5'/> 1333- <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> 1415- </controller> 1433- <controller type='usb' index='0' model='ich9-ehci1'> [root@localhost ~]# virsh start r71 Domain r71 started [root@localhost ~]# ps aux | grep r71 | grep num_queues=5 qemu 12520 99.6 1.1 1694976 93232 ? Sl 11:24 0:08 /usr/libexec/qemu-kvm -name r71 -S -machine pc-i440fx-rhel7.1.0,accel=kvm,usb=off -cpu SandyBridge -drive file=/usr/share/OVMF/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on -drive file=/var/lib/libvirt/qemu/nvram/r71_VARS.fd,if=pflash,format=raw,unit=1 -m 1024 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 1cc0e9e3-8383-42a8-a77d-9dbfa7d10fd7 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/r71.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x6.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x6 -device virtio-scsi-pci,id=scsi0,num_queues=5,... We can get expected results, moved to Verified. Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHBA-2015-2202.html |
Description of problem: Actual model should be assigned before checking its sub-element in qemuBuildControllerDevStr function Version-Release number of selected component (if applicable): libvirt-1.2.8-9.el7.x86_64 How reproducible: 100% Steps to Reproduce: <1> Ignore "model" option, it should be set to "auto" automatically I think. [root@ibm-x3850x5-06 images]# virsh dumpxml r7| grep "<controller type='scsi' index='0'>" -b4 839: <controller type='scsi' index='0'> 878- <driver queues='5'/> 905- <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> 987- </controller> [root@ibm-x3850x5-06 images]# virsh start r7 error: Failed to start domain r7 error: unsupported configuration: 'queues' is only supported by virtio-scsi controller <2> Add "virtio-scsi" to controller's model [root@ibm-x3850x5-06 images]# virsh dumpxml r7| grep "<controller type='scsi' " -b4 839: <controller type='scsi' index='0' model='virtio-scsi'> 898- <driver queues='5'/> 925- <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> 1007- </controller> [root@ibm-x3850x5-06 images]# virsh start r7 Domain r7 started [root@ibm-x3850x5-06 images]# ps aux | grep qemu-kvm qemu 29404 4.1 0.9 4377776 297216 ? Sl 13:49 0:27 /usr/libexec/qemu-kvm -name r7 -S -machine pc-i440fx-rhel7.0.0,accel=kvm,usb=off -m 1024 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid a70da21c-ffe1-4dca-b348-62e44035a6b6 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/r7.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -boot strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -device virtio-scsi-pci,id=scsi0,num_queues=5,bus=pci.0,addr=0x7 ... Actual results: As shown above steps, for qemu-kvm just support virio-scsi-pci by now, so I think "auto" or ignore model option is equal to virio-scsi. Expected results: fix it Additional info: When ignoring model in <controller>, the qemuSetSCSIControllerModel() should be executed firstly in below function, then check those 3 options(queues/cmd_per_lun/max_sectors) using if sentence. qemuBuildControllerDevStr(virDomainDefPtr domainDef, virDomainControllerDefPtr def, virQEMUCapsPtr qemuCaps, int *nusbcontroller) { virBuffer buf = VIR_BUFFER_INITIALIZER; int model; if (!(def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI && def->model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI)) { if (def->queues) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("'queues' is only supported by virtio-scsi controller")); return NULL; } if (def->cmd_per_lun) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("'cmd_per_lun' is only supported by virtio-scsi controller")); return NULL; } if (def->max_sectors) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("'max_sectors' is only supported by virtio-scsi controller")); return NULL; } } switch (def->type) { case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: model = def->model; if ((qemuSetSCSIControllerModel(domainDef, qemuCaps, &model)) < 0) return NULL;