74 lines
2.9 KiB
Diff
74 lines
2.9 KiB
Diff
|
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;
|
||
|
}
|