[libvirt] [PATCH v2 04/14] nodedev: Use switch for virNodeDeviceObjHasCap and virNodeDeviceCapMatch

John Ferlan jferlan at redhat.com
Thu May 25 19:57:01 UTC 2017


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 at 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




More information about the libvir-list mailing list