In order to ensure that whenever something is added to virNodeDevCapType
that both functions are considered for processing of a new capability,
change the if-then-else construct into a switch statement.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/virnodedeviceobj.c | 80 +++++++++++++++++++++++++++++++++------------
1 file changed, 60 insertions(+), 20 deletions(-)
diff --git a/src/conf/virnodedeviceobj.c b/src/conf/virnodedeviceobj.c
index bbb6eeb..913cdda 100644
--- a/src/conf/virnodedeviceobj.c
+++ b/src/conf/virnodedeviceobj.c
@@ -48,19 +48,41 @@ virNodeDeviceObjHasCap(const virNodeDeviceObj *dev,
while (caps) {
if (STREQ(cap, virNodeDevCapTypeToString(caps->data.type))) {
return 1;
- } else if (caps->data.type == VIR_NODE_DEV_CAP_SCSI_HOST) {
- if ((STREQ(cap, fc_host_cap) &&
- (caps->data.scsi_host.flags &
- VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST)) ||
- (STREQ(cap, vports_cap) &&
- (caps->data.scsi_host.flags &
- VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS)))
- return 1;
- } else if (caps->data.type == VIR_NODE_DEV_CAP_PCI_DEV) {
- if ((STREQ(cap, mdev_types)) &&
- (caps->data.pci_dev.flags &
- VIR_NODE_DEV_CAP_FLAG_PCI_MDEV))
- return 1;
+ } else {
+ switch (caps->data.type) {
+ case VIR_NODE_DEV_CAP_PCI_DEV:
+ if ((STREQ(cap, mdev_types)) &&
+ (caps->data.pci_dev.flags &
+ VIR_NODE_DEV_CAP_FLAG_PCI_MDEV))
+ return 1;
+ break;
+
+ case VIR_NODE_DEV_CAP_SCSI_HOST:
+ if ((STREQ(cap, fc_host_cap) &&
+ (caps->data.scsi_host.flags &
+ VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST)) ||
+ (STREQ(cap, vports_cap) &&
+ (caps->data.scsi_host.flags &
+ VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS)))
+ return 1;
+ break;
+
+ case VIR_NODE_DEV_CAP_SYSTEM:
+ case VIR_NODE_DEV_CAP_USB_DEV:
+ case VIR_NODE_DEV_CAP_USB_INTERFACE:
+ case VIR_NODE_DEV_CAP_NET:
+ case VIR_NODE_DEV_CAP_SCSI_TARGET:
+ case VIR_NODE_DEV_CAP_SCSI:
+ case VIR_NODE_DEV_CAP_STORAGE:
+ case VIR_NODE_DEV_CAP_FC_HOST:
+ case VIR_NODE_DEV_CAP_VPORTS:
+ case VIR_NODE_DEV_CAP_SCSI_GENERIC:
+ case VIR_NODE_DEV_CAP_DRM:
+ case VIR_NODE_DEV_CAP_MDEV_TYPES:
+ case VIR_NODE_DEV_CAP_MDEV:
+ case VIR_NODE_DEV_CAP_LAST:
+ break;
+ }
}
caps = caps->next;
@@ -468,7 +490,15 @@ virNodeDeviceCapMatch(virNodeDeviceObjPtr devobj,
if (type == cap->data.type)
return true;
- if (cap->data.type == VIR_NODE_DEV_CAP_SCSI_HOST) {
+ switch (cap->data.type) {
+ case VIR_NODE_DEV_CAP_PCI_DEV:
+ if (type == VIR_NODE_DEV_CAP_MDEV_TYPES &&
+ (cap->data.pci_dev.flags &
+ VIR_NODE_DEV_CAP_FLAG_PCI_MDEV))
+ return true;
+ break;
+
+ case VIR_NODE_DEV_CAP_SCSI_HOST:
if (type == VIR_NODE_DEV_CAP_FC_HOST &&
(cap->data.scsi_host.flags &
VIR_NODE_DEV_CAP_FLAG_HBA_FC_HOST))
@@ -478,13 +508,23 @@ virNodeDeviceCapMatch(virNodeDeviceObjPtr devobj,
(cap->data.scsi_host.flags &
VIR_NODE_DEV_CAP_FLAG_HBA_VPORT_OPS))
return true;
- }
+ break;
- if (cap->data.type == VIR_NODE_DEV_CAP_PCI_DEV) {
- if (type == VIR_NODE_DEV_CAP_MDEV_TYPES &&
- (cap->data.pci_dev.flags &
- VIR_NODE_DEV_CAP_FLAG_PCI_MDEV))
- return true;
+ case VIR_NODE_DEV_CAP_SYSTEM:
+ case VIR_NODE_DEV_CAP_USB_DEV:
+ case VIR_NODE_DEV_CAP_USB_INTERFACE:
+ case VIR_NODE_DEV_CAP_NET:
+ case VIR_NODE_DEV_CAP_SCSI_TARGET:
+ case VIR_NODE_DEV_CAP_SCSI:
+ case VIR_NODE_DEV_CAP_STORAGE:
+ case VIR_NODE_DEV_CAP_FC_HOST:
+ case VIR_NODE_DEV_CAP_VPORTS:
+ case VIR_NODE_DEV_CAP_SCSI_GENERIC:
+ case VIR_NODE_DEV_CAP_DRM:
+ case VIR_NODE_DEV_CAP_MDEV_TYPES:
+ case VIR_NODE_DEV_CAP_MDEV:
+ case VIR_NODE_DEV_CAP_LAST:
+ break;
}
}
--
2.9.4