mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
util: iscsi: 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
ec3e8789f1
commit
7ec89811a6
@ -91,7 +91,7 @@ virISCSIGetSession(const char *devpath,
|
||||
int exitstatus = 0;
|
||||
VIR_AUTOFREE(char *) error = NULL;
|
||||
|
||||
virCommandPtr cmd = virCommandNewArgList(ISCSIADM, "--mode",
|
||||
VIR_AUTOPTR(virCommand) cmd = virCommandNewArgList(ISCSIADM, "--mode",
|
||||
"session", NULL);
|
||||
virCommandSetErrorBuffer(cmd, &error);
|
||||
|
||||
@ -101,15 +101,13 @@ virISCSIGetSession(const char *devpath,
|
||||
vars,
|
||||
virISCSIExtractSession,
|
||||
&cbdata, NULL, &exitstatus) < 0)
|
||||
goto cleanup;
|
||||
return NULL;
|
||||
|
||||
if (cbdata.session == NULL && !probe)
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("cannot find iscsiadm session: %s"),
|
||||
NULLSTR(error));
|
||||
|
||||
cleanup:
|
||||
virCommandFree(cmd);
|
||||
return cbdata.session;
|
||||
}
|
||||
|
||||
@ -125,11 +123,11 @@ virStorageBackendIQNFound(const char *initiatoriqn,
|
||||
{
|
||||
int ret = IQN_ERROR;
|
||||
char *line = NULL;
|
||||
virCommandPtr cmd = virCommandNewArgList(ISCSIADM,
|
||||
"--mode", "iface", NULL);
|
||||
VIR_AUTOFREE(char *) outbuf = NULL;
|
||||
VIR_AUTOFREE(char *) iface = NULL;
|
||||
VIR_AUTOFREE(char *) iqn = NULL;
|
||||
VIR_AUTOPTR(virCommand) cmd = virCommandNewArgList(ISCSIADM,
|
||||
"--mode", "iface", NULL);
|
||||
|
||||
*ifacename = NULL;
|
||||
|
||||
@ -196,7 +194,6 @@ virStorageBackendIQNFound(const char *initiatoriqn,
|
||||
if (ret == IQN_MISSING)
|
||||
VIR_DEBUG("Could not find interface with IQN '%s'", iqn);
|
||||
|
||||
virCommandFree(cmd);
|
||||
return ret;
|
||||
|
||||
error:
|
||||
@ -212,8 +209,8 @@ virStorageBackendCreateIfaceIQN(const char *initiatoriqn,
|
||||
char **ifacename)
|
||||
{
|
||||
int ret = -1, exitstatus = -1;
|
||||
virCommandPtr cmd = NULL;
|
||||
VIR_AUTOFREE(char *) temp_ifacename = NULL;
|
||||
VIR_AUTOPTR(virCommand) cmd = NULL;
|
||||
|
||||
if (virAsprintf(&temp_ifacename,
|
||||
"libvirt-iface-%08llx",
|
||||
@ -272,7 +269,6 @@ virStorageBackendCreateIfaceIQN(const char *initiatoriqn,
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
virCommandFree(cmd);
|
||||
if (ret != 0)
|
||||
VIR_FREE(*ifacename);
|
||||
return ret;
|
||||
@ -285,7 +281,6 @@ virISCSIConnection(const char *portal,
|
||||
const char *target,
|
||||
const char **extraargv)
|
||||
{
|
||||
int ret = -1;
|
||||
const char *const baseargv[] = {
|
||||
ISCSIADM,
|
||||
"--mode", "node",
|
||||
@ -293,7 +288,7 @@ virISCSIConnection(const char *portal,
|
||||
"--targetname", target,
|
||||
NULL
|
||||
};
|
||||
virCommandPtr cmd;
|
||||
VIR_AUTOPTR(virCommand) cmd = NULL;
|
||||
VIR_AUTOFREE(char *) ifacename = NULL;
|
||||
|
||||
cmd = virCommandNewArgs(baseargv);
|
||||
@ -306,7 +301,7 @@ virISCSIConnection(const char *portal,
|
||||
break;
|
||||
case IQN_MISSING:
|
||||
if (virStorageBackendCreateIfaceIQN(initiatoriqn, &ifacename) != 0)
|
||||
goto cleanup;
|
||||
return -1;
|
||||
/*
|
||||
* iscsiadm doesn't let you send commands to the Interface IQN,
|
||||
* unless you've first issued a 'sendtargets' command to the
|
||||
@ -317,25 +312,20 @@ virISCSIConnection(const char *portal,
|
||||
*/
|
||||
if (virISCSIScanTargetsInternal(portal, ifacename,
|
||||
true, NULL, NULL) < 0)
|
||||
goto cleanup;
|
||||
return -1;
|
||||
|
||||
break;
|
||||
case IQN_ERROR:
|
||||
default:
|
||||
goto cleanup;
|
||||
return -1;
|
||||
}
|
||||
virCommandAddArgList(cmd, "--interface", ifacename, NULL);
|
||||
}
|
||||
|
||||
if (virCommandRun(cmd, NULL) < 0)
|
||||
goto cleanup;
|
||||
return -1;
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
virCommandFree(cmd);
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -362,14 +352,12 @@ virISCSIConnectionLogout(const char *portal,
|
||||
int
|
||||
virISCSIRescanLUNs(const char *session)
|
||||
{
|
||||
virCommandPtr cmd = virCommandNewArgList(ISCSIADM,
|
||||
VIR_AUTOPTR(virCommand) cmd = virCommandNewArgList(ISCSIADM,
|
||||
"--mode", "session",
|
||||
"-r", session,
|
||||
"-R",
|
||||
NULL);
|
||||
int ret = virCommandRun(cmd, NULL);
|
||||
virCommandFree(cmd);
|
||||
return ret;
|
||||
return virCommandRun(cmd, NULL);
|
||||
}
|
||||
|
||||
|
||||
@ -419,8 +407,7 @@ virISCSIScanTargetsInternal(const char *portal,
|
||||
int vars[] = { 2 };
|
||||
struct virISCSITargetList list;
|
||||
size_t i;
|
||||
int ret = -1;
|
||||
virCommandPtr cmd = virCommandNewArgList(ISCSIADM,
|
||||
VIR_AUTOPTR(virCommand) cmd = virCommandNewArgList(ISCSIADM,
|
||||
"--mode", "discovery",
|
||||
"--type", "sendtargets",
|
||||
"--portal", portal,
|
||||
@ -446,7 +433,7 @@ virISCSIScanTargetsInternal(const char *portal,
|
||||
vars,
|
||||
virISCSIGetTargets,
|
||||
&list, NULL, NULL) < 0)
|
||||
goto cleanup;
|
||||
return -1;
|
||||
|
||||
if (ntargetsret && targetsret) {
|
||||
*ntargetsret = list.ntargets;
|
||||
@ -457,10 +444,7 @@ virISCSIScanTargetsInternal(const char *portal,
|
||||
VIR_FREE(list.targets);
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
virCommandFree(cmd);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -538,9 +522,8 @@ int
|
||||
virISCSINodeNew(const char *portal,
|
||||
const char *target)
|
||||
{
|
||||
virCommandPtr cmd = NULL;
|
||||
VIR_AUTOPTR(virCommand) cmd = NULL;
|
||||
int status;
|
||||
int ret = -1;
|
||||
|
||||
cmd = virCommandNewArgList(ISCSIADM,
|
||||
"--mode", "node",
|
||||
@ -553,20 +536,17 @@ virISCSINodeNew(const char *portal,
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed new node mode for target '%s'"),
|
||||
target);
|
||||
goto cleanup;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (status != 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("%s failed new mode for target '%s' with status '%d'"),
|
||||
ISCSIADM, target, status);
|
||||
goto cleanup;
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
virCommandFree(cmd);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -576,9 +556,8 @@ virISCSINodeUpdate(const char *portal,
|
||||
const char *name,
|
||||
const char *value)
|
||||
{
|
||||
virCommandPtr cmd = NULL;
|
||||
VIR_AUTOPTR(virCommand) cmd = NULL;
|
||||
int status;
|
||||
int ret = -1;
|
||||
|
||||
cmd = virCommandNewArgList(ISCSIADM,
|
||||
"--mode", "node",
|
||||
@ -594,11 +573,8 @@ virISCSINodeUpdate(const char *portal,
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to update '%s' of node mode for target '%s'"),
|
||||
name, target);
|
||||
goto cleanup;
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
virCommandFree(cmd);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user