mirror of
https://github.com/torvalds/linux
synced 2024-09-25 14:01:32 +00:00
[S390] vmlogrdr: purge after recording is switched off
If automatic purge is enabled for a vmlogrdr device, old records are purged before an IUCV recording service is switched on or off. If z/VM generates a large number of records between purging and switching the recording service off, these records remain queued, and may have a negative performance impact on the z/VM system. To avoid this problem, we need to purge the records after recording is switched off. Signed-off-by: Stefan Weinhuber <wein@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
16d2ce271c
commit
ca768b6631
|
@ -249,9 +249,7 @@ static int vmlogrdr_recording(struct vmlogrdr_priv_t * logptr,
|
|||
char cp_command[80];
|
||||
char cp_response[160];
|
||||
char *onoff, *qid_string;
|
||||
|
||||
memset(cp_command, 0x00, sizeof(cp_command));
|
||||
memset(cp_response, 0x00, sizeof(cp_response));
|
||||
int rc;
|
||||
|
||||
onoff = ((action == 1) ? "ON" : "OFF");
|
||||
qid_string = ((recording_class_AB == 1) ? " QID * " : "");
|
||||
|
@ -263,13 +261,13 @@ static int vmlogrdr_recording(struct vmlogrdr_priv_t * logptr,
|
|||
* can't be switched on as long as records are on the queue.
|
||||
* Doing both at the same time doesn't work.
|
||||
*/
|
||||
|
||||
if (purge) {
|
||||
if (purge && (action == 1)) {
|
||||
memset(cp_command, 0x00, sizeof(cp_command));
|
||||
memset(cp_response, 0x00, sizeof(cp_response));
|
||||
snprintf(cp_command, sizeof(cp_command),
|
||||
"RECORDING %s PURGE %s",
|
||||
logptr->recording_name,
|
||||
qid_string);
|
||||
|
||||
cpcmd(cp_command, cp_response, sizeof(cp_response), NULL);
|
||||
}
|
||||
|
||||
|
@ -279,7 +277,6 @@ static int vmlogrdr_recording(struct vmlogrdr_priv_t * logptr,
|
|||
logptr->recording_name,
|
||||
onoff,
|
||||
qid_string);
|
||||
|
||||
cpcmd(cp_command, cp_response, sizeof(cp_response), NULL);
|
||||
/* The recording command will usually answer with 'Command complete'
|
||||
* on success, but when the specific service was never connected
|
||||
|
@ -288,10 +285,25 @@ static int vmlogrdr_recording(struct vmlogrdr_priv_t * logptr,
|
|||
* 'Command complete'. So I use strstr rather then the strncmp.
|
||||
*/
|
||||
if (strstr(cp_response,"Command complete"))
|
||||
return 0;
|
||||
rc = 0;
|
||||
else
|
||||
return -EIO;
|
||||
rc = -EIO;
|
||||
/*
|
||||
* If we turn recording off, we have to purge any remaining records
|
||||
* afterwards, as a large number of queued records may impact z/VM
|
||||
* performance.
|
||||
*/
|
||||
if (purge && (action == 0)) {
|
||||
memset(cp_command, 0x00, sizeof(cp_command));
|
||||
memset(cp_response, 0x00, sizeof(cp_response));
|
||||
snprintf(cp_command, sizeof(cp_command),
|
||||
"RECORDING %s PURGE %s",
|
||||
logptr->recording_name,
|
||||
qid_string);
|
||||
cpcmd(cp_command, cp_response, sizeof(cp_response), NULL);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue