linux/drivers/s390/block
Stefan Haberland 71f3871657 s390/dasd: prevent double format of tracks for ESE devices
For ESE devices we get an error for write operations on an unformatted
track. Afterwards the track will be formatted and the IO operation
restarted.
When using alias devices a track might be accessed by multiple requests
simultaneously and there is a race window that a track gets formatted
twice resulting in data loss.

Prevent this by remembering the amount of formatted tracks when starting
a request and comparing this number before actually formatting a track
on the fly. If the number has changed there is a chance that the current
track was finally formatted in between. As a result do not format the
track and restart the current IO to check.

The number of formatted tracks does not match the overall number of
formatted tracks on the device and it might wrap around but this is no
problem. It is only needed to recognize that a track has been formatted at
all in between.

Fixes: 5e2b17e712 ("s390/dasd: Add dynamic formatting support for ESE volumes")
Cc: stable@vger.kernel.org # 5.3+
Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
Link: https://lore.kernel.org/r/20220505141733.1989450-3-sth@linux.ibm.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2022-05-05 20:08:27 -06:00
..
dasd_3990_erp.c s390/dasd: handle request magic consistently as unsigned int 2021-10-20 08:10:41 -06:00
dasd_alias.c s390/dasd: fix list corruption of lcu list 2020-12-17 13:41:30 -07:00
dasd_devmap.c s390/dasd: use default_groups in kobj_type 2022-01-08 17:44:05 +01:00
dasd_diag.c s390/extable: move EX_TABLE define to asm-extable.h 2022-03-08 00:33:00 +01: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: prevent double format of tracks for ESE devices 2022-05-05 20:08:27 -06:00
dasd_eckd.h s390/dasd: summarize dasd configuration data in a separate structure 2021-10-20 08:10:42 -06:00
dasd_eer.c s390/dasd: Handle out-of-space constraint 2019-07-11 20:39:54 +02:00
dasd_erp.c s390/dasd: handle request magic consistently as unsigned int 2021-10-20 08:10:41 -06:00
dasd_fba.c dasd: use bvec_virt 2021-08-16 10:50:33 -06:00
dasd_fba.h s390/dasd: fix typo in copyright statement 2019-12-20 11:52:01 -07:00
dasd_genhd.c s390 updates for the 5.16 merge window 2021-11-06 14:48:06 -07:00
dasd_int.h s390/dasd: prevent double format of tracks for ESE devices 2022-05-05 20:08:27 -06:00
dasd_ioctl.c s390/dasd: fix kernel doc comment 2021-10-20 08:10:41 -06:00
dasd_proc.c proc: convert everything to "struct proc_ops" 2020-02-04 03:05:26 +00:00
dasd.c s390/dasd: prevent double format of tracks for ESE devices 2022-05-05 20:08:27 -06:00
dcssblk.c dax: remove the copy_from_iter and copy_to_iter methods 2021-12-18 08:04:53 -08:00
Kconfig dax: remove CONFIG_DAX_DRIVER 2021-12-04 08:58:51 -08:00
Makefile s390: remove xpram device driver 2021-09-07 13:38:42 +02:00
scm_blk.c block: remove genhd.h 2022-02-02 07:49:59 -07:00
scm_blk.h block: remove genhd.h 2022-02-02 07:49:59 -07:00
scm_drv.c s390/scm: Make struct scm_driver::remove return void 2021-07-21 11:53:42 +02:00