Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 207858
b: refs/heads/master
c: 982bdf8
h: refs/heads/master
v: v3
  • Loading branch information
Sebastian Ott authored and Martin Schwidefsky committed Aug 9, 2010
1 parent 53d46ab commit bfdef29
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 8 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7cd403142d5dbffa354b7dd369b1069e01b1ae19
refs/heads/master: 982bdf814616bec77c920e16ea4108d409f144ed
14 changes: 11 additions & 3 deletions trunk/drivers/s390/cio/ccwreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,13 @@ static u16 ccwreq_next_path(struct ccw_device *cdev)
{
struct ccw_request *req = &cdev->private->req;

if (!req->singlepath) {
req->mask = 0;
goto out;
}
req->retries = req->maxretries;
req->mask = lpm_adjust(req->mask >>= 1, req->lpm);

out:
return req->mask;
}

Expand Down Expand Up @@ -113,8 +117,12 @@ void ccw_request_start(struct ccw_device *cdev)
{
struct ccw_request *req = &cdev->private->req;

/* Try all paths twice to counter link flapping. */
req->mask = 0x8080;
if (req->singlepath) {
/* Try all paths twice to counter link flapping. */
req->mask = 0x8080;
} else
req->mask = req->lpm;

req->retries = req->maxretries;
req->mask = lpm_adjust(req->mask, req->lpm);
req->drc = 0;
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/s390/cio/device_id.c
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ void ccw_device_sense_id_start(struct ccw_device *cdev)
req->timeout = SENSE_ID_TIMEOUT;
req->maxretries = SENSE_ID_RETRIES;
req->lpm = sch->schib.pmcw.pam & sch->opm;
req->singlepath = 1;
req->check = snsid_check;
req->callback = snsid_callback;
ccw_request_start(cdev);
Expand Down
4 changes: 4 additions & 0 deletions trunk/drivers/s390/cio/device_pgid.c
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ static void spid_start(struct ccw_device *cdev)
req->timeout = PGID_TIMEOUT;
req->maxretries = PGID_RETRIES;
req->lpm = 0x80;
req->singlepath = 1;
req->callback = spid_callback;
spid_do(cdev);
}
Expand Down Expand Up @@ -420,6 +421,7 @@ static void verify_start(struct ccw_device *cdev)
req->timeout = PGID_TIMEOUT;
req->maxretries = PGID_RETRIES;
req->lpm = 0x80;
req->singlepath = 1;
if (cdev->private->flags.pgroup) {
CIO_TRACE_EVENT(4, "snid");
CIO_HEX_EVENT(4, devid, sizeof(*devid));
Expand Down Expand Up @@ -507,6 +509,7 @@ void ccw_device_disband_start(struct ccw_device *cdev)
req->timeout = PGID_TIMEOUT;
req->maxretries = PGID_RETRIES;
req->lpm = sch->schib.pmcw.pam & sch->opm;
req->singlepath = 1;
req->callback = disband_callback;
fn = SPID_FUNC_DISBAND;
if (cdev->private->flags.mpath)
Expand Down Expand Up @@ -560,6 +563,7 @@ void ccw_device_stlck_start(struct ccw_device *cdev, void *data, void *buf1,
req->timeout = PGID_TIMEOUT;
req->maxretries = PGID_RETRIES;
req->lpm = sch->schib.pmcw.pam & sch->opm;
req->singlepath = 1;
req->data = data;
req->callback = stlck_callback;
stlck_build_cp(cdev, buf1, buf2);
Expand Down
10 changes: 6 additions & 4 deletions trunk/drivers/s390/cio/io_sch.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,12 @@ enum io_status {
* @filter: optional callback to adjust request status based on IRB data
* @callback: final callback
* @data: user-defined pointer passed to all callbacks
* @singlepath: if set, use only one path from @lpm per start I/O
* @cancel: non-zero if request was cancelled
* @done: non-zero if request was finished
* @mask: current path mask
* @retries: current number of retries
* @drc: delayed return code
* @cancel: non-zero if request was cancelled
* @done: non-zero if request was finished
*/
struct ccw_request {
struct ccw1 *cp;
Expand All @@ -108,12 +109,13 @@ struct ccw_request {
enum io_status);
void (*callback)(struct ccw_device *, void *, int);
void *data;
unsigned int singlepath:1;
/* These fields are used internally. */
unsigned int cancel:1;
unsigned int done:1;
u16 mask;
u16 retries;
int drc;
int cancel:1;
int done:1;
} __attribute__((packed));

/*
Expand Down

0 comments on commit bfdef29

Please sign in to comment.