File s390-tools-sles15sp2-vmcp-exit-code.patch of Package s390-tools.18705

Subject: [PATCH] [BZ 186342] vmcp: Change sequence of failed exit
From: Thomas Richter <tmricht@linux.ibm.com>

Description:    vmcp: Change sequence of failed exit
Symptom:        VMCP command fails to execute commands with a very large
                response on a very memory constraint system. A kernel log
                message appears in the kernel log file:
                2020-05-29T10:57:16.543860-05:00 xdrf1 kernel: cma:
                        cma_alloc: alloc failed, req-size: 8 pages, ret: -16
                The vmcp command fails and indicates this in the exit code.
                
Problem:        When vmcp fails to execute a CP command with both error
                conditions
                - response buffer is too small
                - CP command failed
                then the vmcp program exits with 'response buffer too small'
                indication.  However, an exit code indicating
                'CP command failed' would be more important in this case.
                So change the vmcp exit code and return 'CP command failed'
                for above error scenario.       

Solution:       Change the vmcp exit code and return 'CP command failed'
                when both error conditions are true.
Reproduction:   Issue vmcp varyoff command on system with low memory and
                many DASD devices.
Upstream-ID:   53b949926f1bf0c6070650aae5f474e8df5378df
Problem-ID:    186342

Upstream-Description:

              vmcp: Change sequence of failed exit

              When vmcp fails to execute a CP command with both error conditions
              - response buffer is too small
              - CP command failed
              then the vmcp program exits with 'response buffer too small' indication.
              However, an exit code indicating 'CP command failed' would be more
              important in this case.
              So change the vmcp exit code and return 'CP command failed' for above
              error scenario.

              Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
              Signed-off-by: Jan Hoeppner <hoeppner@linux.ibm.com>


Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
---
 vmcp/vmcp.c |   10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

--- a/vmcp/vmcp.c
+++ b/vmcp/vmcp.c
@@ -235,15 +235,15 @@ int main(int argc, char **argv)
 	write_buffer(STDOUT_FILENO, cp.response,
 		     MIN(cp.response_size, cp.buffer_size));
 	free(cp.response);
-	if (ret == VMCP_ERR_TOOSMALL) {
-		fprintf(stderr, "Error: output (%d bytes) was truncated, try "
-			"--buffer to increase size\n", cp.response_size);
-		return VMCP_BUF;
-	}
 	if (cp.cprc > 0) {
 		fprintf(stderr, "Error: non-zero CP response for command '%s': "
 			"#%d\n", command, cp.cprc);
 		return VMCP_CP;
 	}
+	if (ret == VMCP_ERR_TOOSMALL) {
+		fprintf(stderr, "Error: output (%d bytes) was truncated, try "
+			"--buffer to increase size\n", cp.response_size);
+		return VMCP_BUF;
+	}
 	return EXIT_SUCCESS;
 }
openSUSE Build Service is sponsored by