From da72346486ad312090f58f0682dcf85ed186afe1 Mon Sep 17 00:00:00 2001 From: John Ferlan 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 846ea686a1..65a8677b65 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; }