forked from pool/s390-tools
36 lines
1.4 KiB
Diff
36 lines
1.4 KiB
Diff
|
Subject: [PATCH] [BZ 143050] zipl/boot: fix failed start subchannel in FBA loader
|
||
|
From: Stefan Haberland <sth@linux.vnet.ibm.com>
|
||
|
|
||
|
Description: zipl/boot: fix failed start subchannel in FBA loader
|
||
|
Symptom: IPL of a FBA device fails with:
|
||
|
Start subchannel failed
|
||
|
disabled wait PSW 00020000 80000000 00000000 00004502
|
||
|
Problem: The FBA loader has only a limited amount of memory to build CCW
|
||
|
requests. Therefore larger I/O requests need to be split.
|
||
|
This splitting was off by one leading to the fact that one CCW
|
||
|
request uses memory of another data structure which in turn leads
|
||
|
to corrupted data.
|
||
|
Solution: Fix by correcting the split rule.
|
||
|
Reproduction: IPL a FBA device.
|
||
|
The error might occur randomly depending on the size of the
|
||
|
kernel image and offsets within it.
|
||
|
Upstream-ID: -
|
||
|
Problem-ID: 143050
|
||
|
|
||
|
Signed-off-by: Stefan Haberland <sth@linux.vnet.ibm.com>
|
||
|
---
|
||
|
zipl/boot/fba2.c | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
--- a/zipl/boot/fba2.c
|
||
|
+++ b/zipl/boot/fba2.c
|
||
|
@@ -59,7 +59,7 @@ restart:
|
||
|
memset(irb, 0, sizeof(struct irb));
|
||
|
memset(&orb, 0, sizeof(struct orb));
|
||
|
|
||
|
- if (blockptr->blockct > MAX_BLOCKCT) {
|
||
|
+ if (blockptr->blockct >= MAX_BLOCKCT) {
|
||
|
record_number = MAX_BLOCKCT - 1;
|
||
|
blockptr->blockct -= MAX_BLOCKCT;
|
||
|
} else {
|