[S390] dasd: fix alignment of transport mode recovery TCW
All TCWs need to be aligned on a 64 byte boundary or the I/O will be rejected. For recovery requests we create fresh TCWs, so we need to do the proper alignment here as well. Signed-off-by: Stefan Weinhuber <wein@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
1bff779285
commit
4a31ba57ca
@ -2287,7 +2287,8 @@ static struct dasd_ccw_req *dasd_3990_erp_add_erp(struct dasd_ccw_req *cqr)
|
|||||||
|
|
||||||
if (cqr->cpmode == 1) {
|
if (cqr->cpmode == 1) {
|
||||||
cplength = 0;
|
cplength = 0;
|
||||||
datasize = sizeof(struct tcw) + sizeof(struct tsb);
|
/* TCW needs to be 64 byte aligned, so leave enough room */
|
||||||
|
datasize = 64 + sizeof(struct tcw) + sizeof(struct tsb);
|
||||||
} else {
|
} else {
|
||||||
cplength = 2;
|
cplength = 2;
|
||||||
datasize = 0;
|
datasize = 0;
|
||||||
@ -2316,8 +2317,8 @@ static struct dasd_ccw_req *dasd_3990_erp_add_erp(struct dasd_ccw_req *cqr)
|
|||||||
if (cqr->cpmode == 1) {
|
if (cqr->cpmode == 1) {
|
||||||
/* make a shallow copy of the original tcw but set new tsb */
|
/* make a shallow copy of the original tcw but set new tsb */
|
||||||
erp->cpmode = 1;
|
erp->cpmode = 1;
|
||||||
erp->cpaddr = erp->data;
|
erp->cpaddr = PTR_ALIGN(erp->data, 64);
|
||||||
tcw = erp->data;
|
tcw = erp->cpaddr;
|
||||||
tsb = (struct tsb *) &tcw[1];
|
tsb = (struct tsb *) &tcw[1];
|
||||||
*tcw = *((struct tcw *)cqr->cpaddr);
|
*tcw = *((struct tcw *)cqr->cpaddr);
|
||||||
tcw->tsb = (long)tsb;
|
tcw->tsb = (long)tsb;
|
||||||
|
Loading…
Reference in New Issue
Block a user