forked from pool/s390-tools
9901451234
- Added s390-tools-sles15sp3-zipl-fix-4k-scsi-ipl.patch (bsc#1183039) IPL is not working when bootloader is installed on a SCSI disk with 4k physical blocksize without using a devicemapper target. - Added s390-tools-sles15sp3-remove-no-pie-link-arguments.patch so that we can build on systems with binutils 2.36 and higher. Without this, the build fails because that version of the ld command doesn't recognize "-no-pie" an acceptable argument. - Updated the mkdump.pl script to make the name of the temporary configuration file in /tmp/ unpredictable. (bsc#1182876) OBS-URL: https://build.opensuse.org/request/show/877833 OBS-URL: https://build.opensuse.org/package/show/Base:System/s390-tools?expand=0&rev=114
65 lines
2.6 KiB
Diff
65 lines
2.6 KiB
Diff
Subject: [PATCH] [BZ 191696] zipl: fix reading 4k disk's geometry
|
|
From: Stefan Haberland <sth@linux.ibm.com>
|
|
|
|
Description: zipl: fix IPL on 4K SCSI disks
|
|
Symptom: IPL is not working when bootloader is installed
|
|
on a SCSI disk with 4k physical blocksize without using
|
|
a devicemapper target.
|
|
Problem: The getgeo ioctl that is used reports the partition
|
|
start in multiple of 512 byte sectors but the blocksize
|
|
that is used is the physical blocksize of 4k and
|
|
therefore the calculated partition start does not
|
|
match. For device mapper targets the zipl-helper script
|
|
is used that adjusts the partition start correctly to
|
|
the physical blocksize.
|
|
Solution: Adjust the partition start depending on the physical
|
|
blocksize.
|
|
Reproduction: Use zipl to install a bootloader on a SCSI disk with 4k
|
|
physical blocksize and without usage of a device mapper
|
|
target.
|
|
Upstream-ID: 4a3957fab5696cc410c5b495956859a424e3552a
|
|
Problem-ID: 191696
|
|
|
|
Upstream-Description:
|
|
|
|
zipl: fix reading 4k disk's geometry
|
|
|
|
On 4k SCSI disks zipl stores wrong values to 'scsi_mbr.program_table_pointer',
|
|
which makes system unbootable.
|
|
This happens in 'zipl/src/disk.c:656':
|
|
|
|
```
|
|
/* Convert file system block to physical */
|
|
*physical = mapped * phy_per_fs + subblock;
|
|
/* Add partition start */
|
|
*physical += info->geo.start;
|
|
|
|
```
|
|
|
|
So 'hd_geometry.start' should be adjusted before being used.
|
|
|
|
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1918723
|
|
Closes: https://github.com/ibm-s390-linux/s390-tools/pull/107
|
|
Signed-off-by: Nikita Dubrovskii <nikita@linux.ibm.com>
|
|
Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
|
|
Signed-off-by: Jan Hoeppner <hoeppner@linux.ibm.com>
|
|
|
|
|
|
Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
|
|
---
|
|
zipl/src/disk.c | 3 +++
|
|
1 file changed, 3 insertions(+)
|
|
|
|
--- a/zipl/src/disk.c
|
|
+++ b/zipl/src/disk.c
|
|
@@ -444,6 +444,9 @@ type_determined:
|
|
}
|
|
/* Convert device size to size in physical blocks */
|
|
data->phy_blocks = devsize / (data->phy_block_size / 512);
|
|
+ /* Adjust start on SCSI according to block_size. device-mapper devices are skipped */
|
|
+ if (data->type == disk_type_scsi && target->targetbase == NULL)
|
|
+ data->geo.start = data->geo.start / (data->phy_block_size / 512);
|
|
if (data->partnum != 0)
|
|
data->partition = stats.st_rdev;
|
|
/* Try to get device name */
|