提交 618f6a74 编写于 作者: S Sukrit Bhatnagar 提交者: Erik Skultety

util: hostdev: use VIR_AUTOPTR for aggregate types

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