65 lines
2.3 KiB
Diff
65 lines
2.3 KiB
Diff
From: John Ferlan <jferlan@redhat.com>
|
|
Date: Fri, 13 May 2016 13:25:30 -0400
|
|
Subject: [PATCH] iscsi: Add exit status checking for virISCSIGetSession
|
|
|
|
Utilize the exit status parameter for virCommandRunRegex in order to
|
|
check the return error from the 'iscsiadm --mode session' command.
|
|
Without this enabled, if there are no sessions running then virCommandRun
|
|
would have displayed an error such as:
|
|
|
|
2016-05-13 15:17:15.165+0000: 10920: error : virCommandWait:2553 :
|
|
internal error: Child process (iscsiadm --mode session)
|
|
unexpected exit status 21: iscsiadm: No active sessions.
|
|
|
|
It is possible that for certain paths (when probe is true) we only care
|
|
whether it's running or not to make certain decisions. Spitting out
|
|
the error for those paths is unnecessary.
|
|
|
|
If we do have a situation where probe = false and there's an error,
|
|
then display the error from iscsiadm if it's there.
|
|
|
|
(cherry picked from commit 8f54e0d6328eb593c2226459a03afed0da23043d)
|
|
---
|
|
src/util/viriscsi.c | 16 ++++++++++------
|
|
1 file changed, 10 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/src/util/viriscsi.c b/src/util/viriscsi.c
|
|
index 846ea68..65a8677 100644
|
|
--- a/src/util/viriscsi.c
|
|
+++ b/src/util/viriscsi.c
|
|
@@ -79,24 +79,28 @@ virISCSIGetSession(const char *devpath,
|
|
.session = NULL,
|
|
.devpath = devpath,
|
|
};
|
|
+ char *error = NULL;
|
|
+ int exitstatus = 0;
|
|
|
|
- virCommandPtr cmd = virCommandNewArgList(ISCSIADM, "--mode", "session", NULL);
|
|
+ virCommandPtr cmd = virCommandNewArgList(ISCSIADM, "--mode",
|
|
+ "session", NULL);
|
|
+ virCommandSetErrorBuffer(cmd, &error);
|
|
|
|
if (virCommandRunRegex(cmd,
|
|
1,
|
|
regexes,
|
|
vars,
|
|
virISCSIExtractSession,
|
|
- &cbdata, NULL, NULL) < 0)
|
|
+ &cbdata, NULL, &exitstatus) < 0)
|
|
goto cleanup;
|
|
|
|
- if (cbdata.session == NULL && !probe) {
|
|
+ if (cbdata.session == NULL && !probe)
|
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
- "%s", _("cannot find session"));
|
|
- goto cleanup;
|
|
- }
|
|
+ _("cannot find iscsiadm session: %s"),
|
|
+ NULLSTR(error));
|
|
|
|
cleanup:
|
|
+ VIR_FREE(error);
|
|
virCommandFree(cmd);
|
|
return cbdata.session;
|
|
}
|