mirror of
https://github.com/fail0verflow/switch-linux.git
synced 2025-05-04 02:34:21 -04:00
s390/dasd: fix failing CUIR assignment under LPAR
On LPAR the read message buffer command should be executed on the path it was received on otherwise there is a chance that the CUIR assignment might be faulty and the wrong channel path is set online/offline. Fix by setting the path mask accordingly. On z/VM we might not be able to do I/O on this path but there it does not matter on which path the read message buffer command is executed. Therefor implement a retry with an open path mask. Signed-off-by: Stefan Haberland <sth@linux.vnet.ibm.com>
This commit is contained in:
parent
4d81aaa53c
commit
af7752106e
1 changed files with 10 additions and 0 deletions
|
@ -5078,6 +5078,8 @@ static int dasd_eckd_read_message_buffer(struct dasd_device *device,
|
||||||
return PTR_ERR(cqr);
|
return PTR_ERR(cqr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cqr->lpm = lpum;
|
||||||
|
retry:
|
||||||
cqr->startdev = device;
|
cqr->startdev = device;
|
||||||
cqr->memdev = device;
|
cqr->memdev = device;
|
||||||
cqr->block = NULL;
|
cqr->block = NULL;
|
||||||
|
@ -5122,6 +5124,14 @@ static int dasd_eckd_read_message_buffer(struct dasd_device *device,
|
||||||
(prssdp + 1);
|
(prssdp + 1);
|
||||||
memcpy(messages, message_buf,
|
memcpy(messages, message_buf,
|
||||||
sizeof(struct dasd_rssd_messages));
|
sizeof(struct dasd_rssd_messages));
|
||||||
|
} else if (cqr->lpm) {
|
||||||
|
/*
|
||||||
|
* on z/VM we might not be able to do I/O on the requested path
|
||||||
|
* but instead we get the required information on any path
|
||||||
|
* so retry with open path mask
|
||||||
|
*/
|
||||||
|
cqr->lpm = 0;
|
||||||
|
goto retry;
|
||||||
} else
|
} else
|
||||||
DBF_EVENT_DEVID(DBF_WARNING, device->cdev,
|
DBF_EVENT_DEVID(DBF_WARNING, device->cdev,
|
||||||
"Reading messages failed with rc=%d\n"
|
"Reading messages failed with rc=%d\n"
|
||||||
|
|
Loading…
Add table
Reference in a new issue