[libvirt] [PATCH v1 32/40] util: hostdev: use VIR_AUTOPTR for aggregate types

Sukrit Bhatnagar skrtbhtngr at gmail.com
Sat Jul 21 12:07:04 UTC 2018


By making use of GNU C's cleanup attribute handled by the
VIR_AUTOPTR macro for declaring aggregate pointer variables,
majority of the calls to *Free functions can be dropped, which
in turn leads to getting rid of most of our cleanup sections.

Signed-off-by: Sukrit Bhatnagar <skrtbhtngr at gmail.com>
---
 src/util/virhostdev.c | 71 ++++++++++++++++++---------------------------------
 1 file changed, 25 insertions(+), 46 deletions(-)

diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
index c4335a9..b5315b1 100644
--- a/src/util/virhostdev.c
+++ b/src/util/virhostdev.c
@@ -518,11 +518,10 @@ virHostdevRestoreNetConfig(virDomainHostdevDefPtr hostdev,
     VIR_AUTOFREE(char *) linkdev = NULL;
     VIR_AUTOFREE(virMacAddrPtr) MAC = NULL;
     VIR_AUTOFREE(virMacAddrPtr) adminMAC = NULL;
+    VIR_AUTOPTR(virNetDevVlan) vlan = NULL;
     virNetDevVPortProfilePtr virtPort;
-    int ret = -1;
     int vf = -1;
     bool port_profile_associate = false;
-    virNetDevVlanPtr vlan = NULL;
 
 
     /* This is only needed for PCI devices that have been defined
@@ -535,16 +534,16 @@ virHostdevRestoreNetConfig(virDomainHostdevDefPtr hostdev,
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                        _("Interface type hostdev is currently supported on"
                          " SR-IOV Virtual Functions only"));
-        return ret;
+        return -1;
     }
 
     if (virHostdevNetDevice(hostdev, 0, &linkdev, &vf) < 0)
-        return ret;
+        return -1;
 
     virtPort = virDomainNetGetActualVirtPortProfile(
                                  hostdev->parent.data.net);
     if (virtPort) {
-        ret = virHostdevNetConfigVirtPortProfile(linkdev, vf, virtPort,
+        return virHostdevNetConfigVirtPortProfile(linkdev, vf, virtPort,
                                                  &hostdev->parent.data.net->mac,
                                                  NULL,
                                                  port_profile_associate);
@@ -574,7 +573,7 @@ virHostdevRestoreNetConfig(virDomainHostdevDefPtr hostdev,
         /* 1) standard location */
         if (virNetDevReadNetConfig(linkdev, vf, stateDir,
                                    &adminMAC, &vlan, &MAC) < 0) {
-            goto cleanup;
+            return -1;
         }
 
         /* 2) "old" (pre-1.2.3 circa 2014) location - whenever we get
@@ -585,7 +584,7 @@ virHostdevRestoreNetConfig(virDomainHostdevDefPtr hostdev,
         if (!(adminMAC || vlan || MAC) && oldStateDir &&
             virNetDevReadNetConfig(linkdev, vf, oldStateDir,
                                    &adminMAC, &vlan, &MAC) < 0) {
-            goto cleanup;
+            return -1;
         }
 
         /* 3) try using the PF's "port 2" netdev as the name of the
@@ -597,7 +596,7 @@ virHostdevRestoreNetConfig(virDomainHostdevDefPtr hostdev,
             if (virHostdevNetDevice(hostdev, 1, &linkdev, &vf) < 0 ||
                 virNetDevReadNetConfig(linkdev, vf, stateDir,
                                        &adminMAC, &vlan, &MAC) < 0) {
-                goto cleanup;
+                return -1;
             }
         }
 
@@ -627,13 +626,8 @@ virHostdevRestoreNetConfig(virDomainHostdevDefPtr hostdev,
 
         ignore_value(virNetDevSetNetConfig(linkdev, vf,
                                            adminMAC, vlan, MAC, true));
-        ret = 0;
+        return 0;
     }
-
- cleanup:
-    virNetDevVlanFree(vlan);
-
-    return ret;
 }
 
 int
@@ -1117,7 +1111,6 @@ virHostdevUpdateActivePCIDevices(virHostdevManagerPtr mgr,
                                  const char *dom_name)
 {
     virDomainHostdevDefPtr hostdev = NULL;
-    virPCIDevicePtr actual = NULL;
     size_t i;
     int ret = -1;
 
@@ -1128,6 +1121,7 @@ virHostdevUpdateActivePCIDevices(virHostdevManagerPtr mgr,
     virObjectLock(mgr->inactivePCIHostdevs);
 
     for (i = 0; i < nhostdevs; i++) {
+        VIR_AUTOPTR(virPCIDevice) actual = NULL;
         virDomainHostdevSubsysPCIPtr pcisrc;
         hostdev = hostdevs[i];
         pcisrc = &hostdev->source.subsys.u.pci;
@@ -1165,7 +1159,6 @@ virHostdevUpdateActivePCIDevices(virHostdevManagerPtr mgr,
 
     ret = 0;
  cleanup:
-    virPCIDeviceFree(actual);
     virObjectUnlock(mgr->activePCIHostdevs);
     virObjectUnlock(mgr->inactivePCIHostdevs);
     return ret;
@@ -1226,31 +1219,27 @@ virHostdevUpdateActiveSCSIHostDevices(virHostdevManagerPtr mgr,
     virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
     virSCSIDevicePtr scsi = NULL;
     virSCSIDevicePtr tmp = NULL;
-    int ret = -1;
 
     if (!(scsi = virSCSIDeviceNew(NULL,
                                   scsihostsrc->adapter, scsihostsrc->bus,
                                   scsihostsrc->target, scsihostsrc->unit,
                                   hostdev->readonly, hostdev->shareable)))
-        goto cleanup;
+        return -1;
 
     if ((tmp = virSCSIDeviceListFind(mgr->activeSCSIHostdevs, scsi))) {
         if (virSCSIDeviceSetUsedBy(tmp, drv_name, dom_name) < 0) {
             virSCSIDeviceFree(scsi);
-            goto cleanup;
+            return -1;
         }
         virSCSIDeviceFree(scsi);
     } else {
         if (virSCSIDeviceSetUsedBy(scsi, drv_name, dom_name) < 0 ||
             virSCSIDeviceListAdd(mgr->activeSCSIHostdevs, scsi) < 0) {
             virSCSIDeviceFree(scsi);
-            goto cleanup;
+            return -1;
         }
     }
-    ret = 0;
-
- cleanup:
-    return ret;
+    return 0;
 }
 
 int
@@ -1301,7 +1290,7 @@ virHostdevUpdateActiveMediatedDevices(virHostdevManagerPtr mgr,
 {
     int ret = -1;
     size_t i;
-    virMediatedDevicePtr mdev = NULL;
+    VIR_AUTOPTR(virMediatedDevice) mdev = NULL;
 
     if (nhostdevs == 0)
         return 0;
@@ -1327,7 +1316,6 @@ virHostdevUpdateActiveMediatedDevices(virHostdevManagerPtr mgr,
 
     ret = 0;
  cleanup:
-    virMediatedDeviceFree(mdev);
     virObjectUnlock(mgr->activeMediatedHostdevs);
     return ret;
 }
@@ -1560,29 +1548,25 @@ virHostdevPrepareSCSIHostDevices(virDomainHostdevDefPtr hostdev,
 {
     virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
     virSCSIDevicePtr scsi;
-    int ret = -1;
 
     if (hostdev->managed) {
         virReportError(VIR_ERR_XML_ERROR, "%s",
                        _("SCSI host device doesn't support managed mode"));
-        goto cleanup;
+        return -1;
     }
 
     if (!(scsi = virSCSIDeviceNew(NULL,
                                   scsihostsrc->adapter, scsihostsrc->bus,
                                   scsihostsrc->target, scsihostsrc->unit,
                                   hostdev->readonly, hostdev->shareable)))
-        goto cleanup;
+        return -1;
 
     if (virSCSIDeviceListAdd(list, scsi) < 0) {
         virSCSIDeviceFree(scsi);
-        goto cleanup;
+        return -1;
     }
 
-    ret = 0;
-
- cleanup:
-    return ret;
+    return 0;
 }
 
 int
@@ -1859,7 +1843,8 @@ virHostdevReAttachUSBDevices(virHostdevManagerPtr mgr,
     for (i = 0; i < nhostdevs; i++) {
         virDomainHostdevDefPtr hostdev = hostdevs[i];
         virDomainHostdevSubsysUSBPtr usbsrc = &hostdev->source.subsys.u.usb;
-        virUSBDevicePtr usb, tmp;
+        VIR_AUTOPTR(virUSBDevice) usb = NULL;
+        virUSBDevicePtr tmp;
         const char *usedby_drvname;
         const char *usedby_domname;
 
@@ -1883,7 +1868,6 @@ virHostdevReAttachUSBDevices(virHostdevManagerPtr mgr,
          * the list which were taken by @name */
 
         tmp = virUSBDeviceListFind(mgr->activeUSBHostdevs, usb);
-        virUSBDeviceFree(usb);
 
         if (!tmp) {
             VIR_WARN("Unable to find device %03d.%03d "
@@ -1911,7 +1895,7 @@ virHostdevReAttachSCSIHostDevices(virHostdevManagerPtr mgr,
                                   const char *dom_name)
 {
     virDomainHostdevSubsysSCSIHostPtr scsihostsrc = &scsisrc->u.host;
-    virSCSIDevicePtr scsi;
+    VIR_AUTOPTR(virSCSIDevice) scsi = NULL;
     virSCSIDevicePtr tmp;
 
     if (!(scsi = virSCSIDeviceNew(NULL,
@@ -1932,7 +1916,6 @@ virHostdevReAttachSCSIHostDevices(virHostdevManagerPtr mgr,
                  "in list of active SCSI devices",
                  scsihostsrc->adapter, scsihostsrc->bus,
                  scsihostsrc->target, scsihostsrc->unit);
-        virSCSIDeviceFree(scsi);
         return;
     }
 
@@ -1942,7 +1925,6 @@ virHostdevReAttachSCSIHostDevices(virHostdevManagerPtr mgr,
 
     virSCSIDeviceListDel(mgr->activeSCSIHostdevs, tmp,
                          drv_name, dom_name);
-    virSCSIDeviceFree(scsi);
 }
 
 void
@@ -1982,14 +1964,14 @@ virHostdevReAttachSCSIVHostDevices(virHostdevManagerPtr mgr,
                                    int nhostdevs)
 {
     size_t i;
-    virSCSIVHostDevicePtr host, tmp;
-
 
     if (!nhostdevs)
         return;
 
     virObjectLock(mgr->activeSCSIVHostHostdevs);
     for (i = 0; i < nhostdevs; i++) {
+        VIR_AUTOPTR(virSCSIVHostDevice) host = NULL;
+        virSCSIVHostDevicePtr tmp;
         virDomainHostdevDefPtr hostdev = hostdevs[i];
         virDomainHostdevSubsysSCSIVHostPtr hostsrc = &hostdev->source.subsys.u.scsi_host;
         const char *usedby_drvname;
@@ -2017,7 +1999,6 @@ virHostdevReAttachSCSIVHostDevices(virHostdevManagerPtr mgr,
             VIR_WARN("Unable to find device %s "
                      "in list of active SCSI_host devices",
                      hostsrc->wwpn);
-            virSCSIVHostDeviceFree(host);
             virObjectUnlock(mgr->activeSCSIVHostHostdevs);
             return;
         }
@@ -2031,8 +2012,6 @@ virHostdevReAttachSCSIVHostDevices(virHostdevManagerPtr mgr,
 
             virSCSIVHostDeviceListDel(mgr->activeSCSIVHostHostdevs, tmp);
         }
-
-        virSCSIVHostDeviceFree(host);
     }
     virObjectUnlock(mgr->activeSCSIVHostHostdevs);
 }
@@ -2060,7 +2039,8 @@ virHostdevReAttachMediatedDevices(virHostdevManagerPtr mgr,
 
     virObjectLock(mgr->activeMediatedHostdevs);
     for (i = 0; i < nhostdevs; i++) {
-        virMediatedDevicePtr mdev, tmp;
+        VIR_AUTOPTR(virMediatedDevice) mdev = NULL;
+        virMediatedDevicePtr tmp;
         virDomainHostdevSubsysMediatedDevPtr mdevsrc;
         virDomainHostdevDefPtr hostdev = hostdevs[i];
 
@@ -2076,7 +2056,6 @@ virHostdevReAttachMediatedDevices(virHostdevManagerPtr mgr,
         /* Remove from the list only mdevs assigned to @drv_name/@dom_name */
 
         tmp = virMediatedDeviceListFind(mgr->activeMediatedHostdevs, mdev);
-        virMediatedDeviceFree(mdev);
 
         /* skip inactive devices */
         if (!tmp)
-- 
1.8.3.1




More information about the libvir-list mailing list