linux/drivers/s390/block
Jan Höppner ce6915f534 s390/dasd: Make layout analysis ESE compatible
The disk layout and volume information of a DASD reside in the first two
tracks of cylinder 0. When a DASD is set online, currently the first
three tracks are read and analysed to confirm an expected layout.

For CDL (Compatible Disk Layout) only count area data of the first track
is evaluated and checked against expected key and data lengths. For LDL
(Linux Disk Layout) the first and third track is evaluated. However,
an LDL formatted volume is expected to be in the same format across all
tracks. Checking the third track therefore doesn't have any more value
than checking any other track at random.

Now, an Extent Space Efficient (ESE) DASD is initialised by only
formatting the first two tracks, as those tracks always contain all
information necessarry.

Checking the third track on an ESE volume will therefore most likely
fail with a record not found error, as the third track will be empty.
This in turn leads to the device being recognised with a volume size of
0. Attempts to write volume information on the first two tracks then
fail with "no space left on device" errors.

Initialising the first three tracks for an ESE volume is not a viable
solution, because the third track is already a regular track and could
contain user data. With that there is potential for data corruption.

Instead, always only analyse the first two tracks, as it is sufficiant
for both CDL and LDL, and allow ESE volumes to be recognised as well.

Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
2019-07-11 20:39:53 +02:00
..
dasd_3990_erp.c s390/dasd: configurable IFCC handling 2018-02-22 15:31:23 +01:00
dasd_alias.c s390/dasd: fix gcc 8 stringop-truncation warning 2018-07-02 11:24:53 +02:00
dasd_devmap.c s390/dasd: Fix a precision vs width bug in dasd_feature_list() 2019-07-02 16:00:26 +02:00
dasd_diag.c s390/dasd: move dasd_ccw_req to per request data 2018-06-12 15:14:19 +02:00
dasd_diag.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
dasd_eckd.c s390/dasd: Make layout analysis ESE compatible 2019-07-11 20:39:53 +02:00
dasd_eckd.h s390/dasd: Remove unused structs and function prototypes 2019-07-11 20:39:53 +02:00
dasd_eer.c s390/dasd,zfcp: fix gcc 8 stringop-truncation warnings 2018-07-02 11:24:52 +02:00
dasd_erp.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
dasd_fba.c s390/dasd: move dasd_ccw_req to per request data 2018-06-12 15:14:19 +02:00
dasd_fba.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
dasd_genhd.c block: genhd: add 'groups' argument to device_add_disk 2018-09-28 08:30:28 -06:00
dasd_int.h s390/dasd: reduce the default queue depth and nr of hardware queues 2018-07-02 11:22:41 +02:00
dasd_ioctl.c dasd: remove dead code 2018-11-07 13:42:32 -07:00
dasd_proc.c s390/drivers: fix proc/debugfs file permissions 2018-12-13 10:42:24 +01:00
dasd.c s390/dasd: fix read device characteristic with CONFIG_VMAP_STACK=y 2019-03-01 16:23:56 +01:00
dcssblk.c dax: Arrange for dax_supported check to span multiple devices 2019-05-20 15:02:08 -07:00
Kconfig s390/Kconfig: pedantic cleanups 2019-06-04 15:03:46 +02:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
scm_blk.c block: genhd: add 'groups' argument to device_add_disk 2018-09-28 08:30:28 -06:00
scm_blk.h Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux 2017-11-13 11:47:01 -08:00
scm_drv.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xpram.c block: Use blk_queue_flag_*() in drivers instead of queue_flag_*() 2018-03-08 14:13:48 -07:00