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:
Родитель
4d81aaa53c
Коммит
af7752106e
|
@ -5078,6 +5078,8 @@ static int dasd_eckd_read_message_buffer(struct dasd_device *device,
|
|||
return PTR_ERR(cqr);
|
||||
}
|
||||
|
||||
cqr->lpm = lpum;
|
||||
retry:
|
||||
cqr->startdev = device;
|
||||
cqr->memdev = device;
|
||||
cqr->block = NULL;
|
||||
|
@ -5122,6 +5124,14 @@ static int dasd_eckd_read_message_buffer(struct dasd_device *device,
|
|||
(prssdp + 1);
|
||||
memcpy(messages, message_buf,
|
||||
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
|
||||
DBF_EVENT_DEVID(DBF_WARNING, device->cdev,
|
||||
"Reading messages failed with rc=%d\n"
|
||||
|
|
Загрузка…
Ссылка в новой задаче