Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af775210 authored by Stefan Haberland's avatar Stefan Haberland Committed by Martin Schwidefsky
Browse files

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: default avatarStefan Haberland <sth@linux.vnet.ibm.com>
parent 4d81aaa5
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -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"