mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-07-30 13:37:17 +00:00
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: Sukrit Bhatnagar <skrtbhtngr@gmail.com> Reviewed-by: Erik Skultety <eskultet@redhat.com>
This commit is contained in:
parent
37cf4b3b1e
commit
618f6a74da
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user