[S390] cio: improve error recovery for internal I/Os
Improve error recovery for internal I/Os by repeating each I/O 256 times per path to cope with long-running non-permanent error conditions. Also retry each path twice to cope with link flapping, i.e. single paths becoming unavailable in the order in which they are tried. Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
7a8ad1001c
commit
de1b04388f
4 changed files with 7 additions and 6 deletions
|
@ -82,7 +82,7 @@ static void ccwreq_do(struct ccw_device *cdev)
|
|||
/* Perform start function. */
|
||||
sch->lpm = 0xff;
|
||||
memset(&cdev->private->irb, 0, sizeof(struct irb));
|
||||
rc = cio_start(sch, cp, req->mask);
|
||||
rc = cio_start(sch, cp, (u8) req->mask);
|
||||
if (rc == 0) {
|
||||
/* I/O started successfully. */
|
||||
ccw_device_set_timeout(cdev, req->timeout);
|
||||
|
@ -116,7 +116,8 @@ void ccw_request_start(struct ccw_device *cdev)
|
|||
{
|
||||
struct ccw_request *req = &cdev->private->req;
|
||||
|
||||
req->mask = 0x80;
|
||||
/* Try all paths twice to counter link flapping. */
|
||||
req->mask = 0x8080;
|
||||
req->retries = req->maxretries;
|
||||
req->mask = lpm_adjust(req->mask, req->lpm);
|
||||
req->drc = 0;
|
||||
|
@ -212,7 +213,7 @@ static void ccwreq_log_status(struct ccw_device *cdev, enum io_status status)
|
|||
} __attribute__ ((packed)) data;
|
||||
data.dev_id = cdev->private->dev_id;
|
||||
data.retries = req->retries;
|
||||
data.lpm = req->mask;
|
||||
data.lpm = (u8) req->mask;
|
||||
data.status = (u8) status;
|
||||
CIO_TRACE_EVENT(2, "reqstat");
|
||||
CIO_HEX_EVENT(2, &data, sizeof(data));
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
#include "device.h"
|
||||
#include "io_sch.h"
|
||||
|
||||
#define SENSE_ID_RETRIES 5
|
||||
#define SENSE_ID_RETRIES 256
|
||||
#define SENSE_ID_TIMEOUT (10 * HZ)
|
||||
#define SENSE_ID_MIN_LEN 4
|
||||
#define SENSE_ID_BASIC_LEN 7
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
#include "device.h"
|
||||
#include "io_sch.h"
|
||||
|
||||
#define PGID_RETRIES 5
|
||||
#define PGID_RETRIES 256
|
||||
#define PGID_TIMEOUT (10 * HZ)
|
||||
|
||||
/*
|
||||
|
|
|
@ -109,7 +109,7 @@ struct ccw_request {
|
|||
void (*callback)(struct ccw_device *, void *, int);
|
||||
void *data;
|
||||
/* These fields are used internally. */
|
||||
u8 mask;
|
||||
u16 mask;
|
||||
u16 retries;
|
||||
int drc;
|
||||
int cancel:1;
|
||||
|
|
Loading…
Reference in a new issue