qemu: block: Remove unneeded cleanup jumps

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2019-04-04 11:31:05 +02:00
parent 6542fbe2d5
commit c9cec6a8b0

View File

@ -142,7 +142,6 @@ qemuBlockNodeNameGetBackingChainBacking(virJSONValuePtr next,
const char *drvparent = NULL;
const char *parentnodename = NULL;
const char *filename = NULL;
int ret = -1;
if (!nodename)
return 0;
@ -172,27 +171,24 @@ qemuBlockNodeNameGetBackingChainBacking(virJSONValuePtr next,
}
if (VIR_ALLOC(data) < 0)
goto cleanup;
return -1;
if (VIR_STRDUP(data->nodeformat, nodename) < 0 ||
VIR_STRDUP(data->nodestorage, parentnodename) < 0 ||
VIR_STRDUP(data->qemufilename, filename) < 0 ||
VIR_STRDUP(data->drvformat, drvname) < 0 ||
VIR_STRDUP(data->drvstorage, drvparent) < 0)
goto cleanup;
return -1;
if (backing &&
qemuBlockNodeNameGetBackingChainBacking(backing, nodenamestable,
&backingdata) < 0)
goto cleanup;
return -1;
VIR_STEAL_PTR(data->backing, backingdata);
VIR_STEAL_PTR(*nodenamedata, data);
ret = 0;
cleanup:
return ret;
return 0;
}
@ -204,22 +200,17 @@ qemuBlockNodeNameGetBackingChainDisk(size_t pos ATTRIBUTE_UNUSED,
struct qemuBlockNodeNameGetBackingChainData *data = opaque;
const char *device = virJSONValueObjectGetString(item, "device");
VIR_AUTOPTR(qemuBlockNodeNameBackingChainData) devicedata = NULL;
int ret = -1;
if (qemuBlockNodeNameGetBackingChainBacking(item, data->nodenamestable,
&devicedata) < 0)
goto cleanup;
return -1;
if (devicedata &&
virHashAddEntry(data->disks, device, devicedata) < 0)
goto cleanup;
return -1;
devicedata = NULL;
ret = 1; /* we don't really want to steal @item */
cleanup:
return ret;
return 1; /* we don't really want to steal @item */
}
@ -248,15 +239,15 @@ qemuBlockNodeNameGetBackingChain(virJSONValuePtr namednodes,
memset(&data, 0, sizeof(data));
if (!(namednodestable = virHashCreate(50, virJSONValueHashFree)))
goto cleanup;
return NULL;
if (virJSONValueArrayForeachSteal(namednodes,
qemuBlockNamedNodesArrayToHash,
namednodestable) < 0)
goto cleanup;
return NULL;
if (!(disks = virHashCreate(50, qemuBlockNodeNameBackingChainDataHashEntryFree)))
goto cleanup;
return NULL;
data.nodenamestable = namednodestable;
data.disks = disks;
@ -264,13 +255,10 @@ qemuBlockNodeNameGetBackingChain(virJSONValuePtr namednodes,
if (virJSONValueArrayForeachSteal(blockstats,
qemuBlockNodeNameGetBackingChainDisk,
&data) < 0)
goto cleanup;
return NULL;
VIR_STEAL_PTR(ret, disks);
cleanup:
return ret;
return ret;
}
@ -347,7 +335,6 @@ qemuBlockNodeNamesDetect(virQEMUDriverPtr driver,
VIR_AUTOPTR(virJSONValue) blockstats = NULL;
virDomainDiskDefPtr disk;
size_t i;
int ret = -1;
if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_QUERY_NAMED_BLOCK_NODES))
return 0;
@ -359,23 +346,19 @@ qemuBlockNodeNamesDetect(virQEMUDriverPtr driver,
blockstats = qemuMonitorQueryBlockstats(qemuDomainGetMonitor(vm));
if (qemuDomainObjExitMonitor(driver, vm) < 0 || !data || !blockstats)
goto cleanup;
return -1;
if (!(disktable = qemuBlockNodeNameGetBackingChain(data, blockstats)))
goto cleanup;
return -1;
for (i = 0; i < vm->def->ndisks; i++) {
disk = vm->def->disks[i];
if (qemuBlockDiskDetectNodes(disk, disktable) < 0)
goto cleanup;
return -1;
}
ret = 0;
cleanup:
return ret;
return 0;
}
@ -399,13 +382,10 @@ qemuBlockGetNodeData(virJSONValuePtr data)
if (virJSONValueArrayForeachSteal(data,
qemuBlockNamedNodesArrayToHash, nodedata) < 0)
goto error;
return NULL;
VIR_STEAL_PTR(ret, nodedata);
return ret;
error:
return NULL;
}
@ -440,44 +420,42 @@ qemuBlockStorageSourceGetURI(virStorageSourcePtr src)
virReportError(VIR_ERR_INTERNAL_ERROR,
_("protocol '%s' accepts only one host"),
virStorageNetProtocolTypeToString(src->protocol));
goto cleanup;
return NULL;
}
if (VIR_ALLOC(uri) < 0)
goto cleanup;
return NULL;
if (src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) {
uri->port = src->hosts->port;
if (VIR_STRDUP(uri->scheme,
virStorageNetProtocolTypeToString(src->protocol)) < 0)
goto cleanup;
return NULL;
} else {
if (virAsprintf(&uri->scheme, "%s+%s",
virStorageNetProtocolTypeToString(src->protocol),
virStorageNetHostTransportTypeToString(src->hosts->transport)) < 0)
goto cleanup;
return NULL;
}
if (src->path) {
if (src->volume) {
if (virAsprintf(&uri->path, "/%s/%s",
src->volume, src->path) < 0)
goto cleanup;
return NULL;
} else {
if (virAsprintf(&uri->path, "%s%s",
src->path[0] == '/' ? "" : "/",
src->path) < 0)
goto cleanup;
return NULL;
}
}
if (VIR_STRDUP(uri->server, src->hosts->name) < 0)
goto cleanup;
return NULL;
VIR_STEAL_PTR(ret, uri);
cleanup:
return ret;
}
@ -513,14 +491,14 @@ qemuBlockStorageSourceBuildJSONSocketAddress(virStorageNetHostDefPtr host,
transport = "inet";
if (virAsprintf(&port, "%u", host->port) < 0)
goto cleanup;
return NULL;
if (virJSONValueObjectCreate(&server,
"s:type", transport,
"s:host", host->name,
"s:port", port,
NULL) < 0)
goto cleanup;
return NULL;
break;
case VIR_STORAGE_NET_HOST_TRANS_UNIX:
@ -533,7 +511,7 @@ qemuBlockStorageSourceBuildJSONSocketAddress(virStorageNetHostDefPtr host,
"s:type", "unix",
field, host->socket,
NULL) < 0)
goto cleanup;
return NULL;
break;
case VIR_STORAGE_NET_HOST_TRANS_RDMA:
@ -541,13 +519,10 @@ qemuBlockStorageSourceBuildJSONSocketAddress(virStorageNetHostDefPtr host,
virReportError(VIR_ERR_INTERNAL_ERROR,
_("transport protocol '%s' is not yet supported"),
virStorageNetHostTransportTypeToString(host->transport));
goto cleanup;
return NULL;
}
VIR_STEAL_PTR(ret, server);
cleanup:
return ret;
}
@ -571,24 +546,21 @@ qemuBlockStorageSourceBuildHostsJSONSocketAddress(virStorageSourcePtr src,
size_t i;
if (!(servers = virJSONValueNewArray()))
goto cleanup;
return NULL;
for (i = 0; i < src->nhosts; i++) {
host = src->hosts + i;
if (!(server = qemuBlockStorageSourceBuildJSONSocketAddress(host, legacy)))
goto cleanup;
return NULL;
if (virJSONValueArrayAppend(servers, server) < 0)
goto cleanup;
return NULL;
server = NULL;
}
VIR_STEAL_PTR(ret, servers);
cleanup:
return ret;
}
@ -643,24 +615,21 @@ qemuBlockStorageSourceBuildHostsJSONInetSocketAddress(virStorageSourcePtr src)
size_t i;
if (!(servers = virJSONValueNewArray()))
goto cleanup;
return NULL;
for (i = 0; i < src->nhosts; i++) {
host = src->hosts + i;
if (!(server = qemuBlockStorageSourceBuildJSONInetSocketAddress(host)))
goto cleanup;
return NULL;
if (virJSONValueArrayAppend(servers, server) < 0)
goto cleanup;
return NULL;
server = NULL;
}
VIR_STEAL_PTR(ret, servers);
cleanup:
return ret;
}
@ -687,16 +656,13 @@ qemuBlockStorageSourceGetGlusterProps(virStorageSourcePtr src,
"s:volume", src->volume,
"s:path", src->path,
"a:server", &servers, NULL) < 0)
goto cleanup;
return NULL;
if (src->debug &&
virJSONValueObjectAdd(props, "u:debug", src->debugLevel, NULL) < 0)
goto cleanup;
return NULL;
VIR_STEAL_PTR(ret, props);
cleanup:
return ret;
}
@ -759,10 +725,10 @@ qemuBlockStorageSourceGetCURLProps(virStorageSourcePtr src)
driver = virStorageNetProtocolTypeToString(src->protocol);
if (!(uri = qemuBlockStorageSourceGetURI(src)))
goto cleanup;
return NULL;
if (!(uristr = virURIFormat(uri)))
goto cleanup;
return NULL;
if (src->auth) {
username = src->auth->username;
@ -776,8 +742,6 @@ qemuBlockStorageSourceGetCURLProps(virStorageSourcePtr src)
"S:password-secret", passwordalias,
NULL));
cleanup:
return ret;
}
@ -807,7 +771,7 @@ qemuBlockStorageSourceGetISCSIProps(virStorageSourcePtr src)
*/
if (VIR_STRDUP(target, src->path) < 0)
goto cleanup;
return NULL;
/* Separate the target and lun */
if ((lunStr = strchr(target, '/'))) {
@ -816,7 +780,7 @@ qemuBlockStorageSourceGetISCSIProps(virStorageSourcePtr src)
virReportError(VIR_ERR_INTERNAL_ERROR,
_("cannot parse target for lunStr '%s'"),
target);
goto cleanup;
return NULL;
}
}
@ -824,11 +788,11 @@ qemuBlockStorageSourceGetISCSIProps(virStorageSourcePtr src)
if (virSocketAddrNumericFamily(src->hosts[0].name) == AF_INET6) {
if (virAsprintf(&portal, "[%s]:%u",
src->hosts[0].name, src->hosts[0].port) < 0)
goto cleanup;
return NULL;
} else {
if (virAsprintf(&portal, "%s:%u",
src->hosts[0].name, src->hosts[0].port) < 0)
goto cleanup;
return NULL;
}
if (src->auth) {
@ -846,9 +810,6 @@ qemuBlockStorageSourceGetISCSIProps(virStorageSourcePtr src)
"S:password-secret", objalias,
"S:initiator-name", src->initiator.iqn,
NULL));
goto cleanup;
cleanup:
return ret;
}
@ -876,9 +837,8 @@ qemuBlockStorageSourceGetNBDProps(virStorageSourcePtr src)
"S:export", src->path,
"S:tls-creds", src->tlsAlias,
NULL) < 0)
goto cleanup;
return NULL;
cleanup:
return ret;
}
@ -903,17 +863,17 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src)
keysecret = srcPriv->secinfo->s.aes.alias;
/* the auth modes are modelled after our old command line generator */
if (!(authmodes = virJSONValueNewArray()))
goto cleanup;
return NULL;
if (!(mode = virJSONValueNewString("cephx")) ||
virJSONValueArrayAppend(authmodes, mode) < 0)
goto cleanup;
return NULL;
mode = NULL;
if (!(mode = virJSONValueNewString("none")) ||
virJSONValueArrayAppend(authmodes, mode) < 0)
goto cleanup;
return NULL;
mode = NULL;
}
@ -929,9 +889,8 @@ qemuBlockStorageSourceGetRBDProps(virStorageSourcePtr src)
"A:auth-client-required", &authmodes,
"S:key-secret", keysecret,
NULL) < 0)
goto cleanup;
return NULL;
cleanup:
return ret;
}
@ -959,9 +918,8 @@ qemuBlockStorageSourceGetSheepdogProps(virStorageSourcePtr src)
"a:server", &serverprops,
"s:vdi", src->path,
NULL) < 0)
goto cleanup;
return NULL;
cleanup:
return ret;
}
@ -992,9 +950,8 @@ qemuBlockStorageSourceGetSshProps(virStorageSourcePtr src)
"a:server", &serverprops,
"S:user", username,
NULL) < 0)
goto cleanup;
return NULL;
cleanup:
return ret;
}
@ -1167,22 +1124,20 @@ qemuBlockStorageSourceGetBackendProps(virStorageSourcePtr src,
if (qemuBlockNodeNameValidate(src->nodestorage) < 0 ||
virJSONValueObjectAdd(fileprops, "S:node-name", src->nodestorage, NULL) < 0)
goto cleanup;
return NULL;
if (!legacy) {
if (qemuBlockStorageSourceGetBlockdevGetCacheProps(src, fileprops) < 0)
goto cleanup;
return NULL;
if (virJSONValueObjectAdd(fileprops,
"b:read-only", src->readonly,
"s:discard", "unmap",
NULL) < 0)
goto cleanup;
return NULL;
}
VIR_STEAL_PTR(ret, fileprops);
cleanup:
return ret;
}
@ -1266,7 +1221,6 @@ qemuBlockStorageSourceGetFormatQcowGenericProps(virStorageSourcePtr src,
virJSONValuePtr props)
{
VIR_AUTOPTR(virJSONValue) encprops = NULL;
int ret = -1;
if (qemuBlockStorageSourceGetCryptoProps(src, &encprops) < 0)
return -1;
@ -1274,12 +1228,9 @@ qemuBlockStorageSourceGetFormatQcowGenericProps(virStorageSourcePtr src,
if (virJSONValueObjectAdd(props,
"s:driver", format,
"A:encrypt", &encprops, NULL) < 0)
goto cleanup;
return -1;
ret = 0;
cleanup:
return ret;
return 0;
}
@ -1339,11 +1290,9 @@ qemuBlockStorageSourceGetBlockdevFormatCommonProps(virStorageSourcePtr src)
return NULL;
if (qemuBlockStorageSourceGetBlockdevGetCacheProps(src, props) < 0)
goto cleanup;
return NULL;
VIR_STEAL_PTR(ret, props);
cleanup:
return ret;
}
@ -1356,7 +1305,7 @@ qemuBlockStorageSourceGetBlockdevFormatProps(virStorageSourcePtr src)
virJSONValuePtr ret = NULL;
if (!(props = qemuBlockStorageSourceGetBlockdevFormatCommonProps(src)))
goto cleanup;
return NULL;
switch ((virStorageFileFormat) src->format) {
case VIR_STORAGE_FILE_FAT:
@ -1364,17 +1313,17 @@ qemuBlockStorageSourceGetBlockdevFormatProps(virStorageSourcePtr src)
* put a raw layer on top */
case VIR_STORAGE_FILE_RAW:
if (qemuBlockStorageSourceGetFormatRawProps(src, props) < 0)
goto cleanup;
return NULL;
break;
case VIR_STORAGE_FILE_QCOW2:
if (qemuBlockStorageSourceGetFormatQcow2Props(src, props) < 0)
goto cleanup;
return NULL;
break;
case VIR_STORAGE_FILE_QCOW:
if (qemuBlockStorageSourceGetFormatQcowGenericProps(src, "qcow", props) < 0)
goto cleanup;
return NULL;
break;
/* formats without any special parameters */
@ -1405,22 +1354,19 @@ qemuBlockStorageSourceGetBlockdevFormatProps(virStorageSourcePtr src)
virReportError(VIR_ERR_INTERNAL_ERROR,
_("mishandled storage format '%s'"),
virStorageFileFormatTypeToString(src->format));
goto cleanup;
return NULL;
case VIR_STORAGE_FILE_LAST:
default:
virReportEnumRangeError(virStorageFileFormat, src->format);
goto cleanup;
return NULL;
}
if (driver &&
virJSONValueObjectAdd(props, "s:driver", driver, NULL) < 0)
goto cleanup;
return NULL;
VIR_STEAL_PTR(ret, props);
cleanup:
return ret;
}
@ -1445,31 +1391,29 @@ qemuBlockStorageSourceGetBlockdevProps(virStorageSourcePtr src)
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("storage format '%s' does not support backing store"),
virStorageFileFormatTypeToString(src->format));
goto cleanup;
return NULL;
}
if (!(props = qemuBlockStorageSourceGetBlockdevFormatProps(src)))
goto cleanup;
return NULL;
if (virJSONValueObjectAppendString(props, "file", src->nodestorage) < 0)
goto cleanup;
return NULL;
if (src->backingStore && backingSupported) {
if (virStorageSourceHasBacking(src)) {
if (virJSONValueObjectAppendString(props, "backing",
src->backingStore->nodeformat) < 0)
goto cleanup;
return NULL;
} else {
/* chain is terminated, indicate that no detection should happen
* in qemu */
if (virJSONValueObjectAppendNull(props, "backing") < 0)
goto cleanup;
return NULL;
}
}
VIR_STEAL_PTR(ret, props);
cleanup:
return ret;
}
@ -1520,14 +1464,12 @@ qemuBlockStorageSourceAttachPrepareBlockdev(virStorageSourcePtr src)
if (!(data->formatProps = qemuBlockStorageSourceGetBlockdevProps(src)) ||
!(data->storageProps = qemuBlockStorageSourceGetBackendProps(src, false)))
goto cleanup;
return NULL;
data->storageNodeName = src->nodestorage;
data->formatNodeName = src->nodeformat;
VIR_STEAL_PTR(ret, data);
cleanup:
return ret;
}
@ -1690,13 +1632,12 @@ qemuBlockSnapshotAddLegacy(virJSONValuePtr actions,
const char *format = virStorageFileFormatTypeToString(newsrc->format);
VIR_AUTOFREE(char *) device = NULL;
VIR_AUTOFREE(char *) source = NULL;
int ret = -1;
if (!(device = qemuAliasDiskDriveFromDisk(disk)))
goto cleanup;
return -1;
if (qemuGetDriveSourceString(newsrc, NULL, &source) < 0)
goto cleanup;
return -1;
if (qemuMonitorJSONTransactionAdd(actions, "blockdev-snapshot-sync",
"s:device", device,
@ -1704,12 +1645,9 @@ qemuBlockSnapshotAddLegacy(virJSONValuePtr actions,
"s:format", format,
"S:mode", reuse ? "existing" : NULL,
NULL) < 0)
goto cleanup;
return -1;
ret = 0;
cleanup:
return ret;
return 0;
}