s390/dasd: copy pair swap fixes
Subsystems (3)
Stefan Haberland
maintainercover s390/dasd: copy pair swap fixes
Hi Jens,
Please apply the following two patches for the upcoming 7.0-rc.
Both patches are straightforward and address a rarely used code path. While users are unlikely to encounter these issues in typical deployments, the second patch is important as it addresses a potential data corruption issue after a disk swap.
Best regards,
Stefan
Stefan Haberland (2):
s390/dasd: Move quiesce state with pprc swap s390/dasd: Copy detected format information to secondary device
drivers/s390/block/dasd_eckd.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)
Signature · 1 line
2.51.0
Stefan Haberland
maintainerPATCH 1/2 s390/dasd: Move quiesce state with pprc swap
Quiesce and resume is a mechanism to suspend operations on DASD devices. In the context of a controlled copy pair swap operation, the quiesce operation is usually issued before the actual swap and a resume afterwards.
During the swap operation, the underlying device is exchanged. Therefore, the quiesce flag must be moved to the secondary device to ensure a consistent quiesce state after the swap.
The secondary device itself cannot be suspended separately because there is no separate block device representation for it.
--- drivers/s390/block/dasd_eckd.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/s390/block/dasd_eckd.c +5 -0
@@ -6182,6 +6182,11 @@ static int dasd_eckd_copy_pair_swap(struct dasd_device *device, char *prim_busid dev_name(&secondary->cdev->dev), rc); } +if (primary->stopped &DASD_STOPPED_QUIESCE ) { +dasd_device_set_stop_bits (secondary,DASD_STOPPED_QUIESCE ); +dasd_device_remove_stop_bits (primary,DASD_STOPPED_QUIESCE ); + } +/* re-enable device */ dasd_device_remove_stop_bits (primary,DASD_STOPPED_PPRC );dasd_device_remove_stop_bits (secondary,DASD_STOPPED_PPRC );
Signature · 1 line
2.51.0
Stefan Haberland
maintainerPATCH 2/2 s390/dasd: Copy detected format information to secondary device
In reply to Stefan HaberlandDuring online processing for a DASD device an IO operation is started to determine the format of the device. CDL format contains specifically sized blocks at the beginning of the disk.
For a PPRC secondary device no real IO operation is possible therefore this IO request can not be started and this step is skipped for online processing of secondary devices. This is generally fine since the secondary is a copy of the primary device.
In case of an additional partition detection that is run after a swap operation the format information is needed to properly drive partition detection IO.
Currently the information is not passed leading to IO errors during partition detection and a wrongly detected partition table which in turn might lead to data corruption on the disk with the wrong partition table.
Fix by passing the format information from primary to secondary device.
--- drivers/s390/block/dasd_eckd.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
drivers/s390/block/dasd_eckd.c +11 -0
@@ -6135,6 +6135,7 @@ static void copy_pair_set_active(struct dasd_copy_relation *copy, char *new_busistatic int dasd_eckd_copy_pair_swap (struct dasd_device *device,char *prim_busid,char *sec_busid) { +struct dasd_eckd_private *prim_priv, *sec_priv;struct dasd_device *primary, *secondary;struct dasd_copy_relation *copy;struct dasd_block *block;
@@ -6155,6 +6156,9 @@ static int dasd_eckd_copy_pair_swap(struct dasd_device *device, char *prim_busidif (!secondary)return DASD_COPYPAIRSWAP_SECONDARY ; + prim_priv = primary->private; + sec_priv = secondary->private; +/* * usually the device should be quiesced for swap * for paranoia stop device and requeue requests again
@@ -6187,6 +6191,13 @@ static int dasd_eckd_copy_pair_swap(struct dasd_device *device, char *prim_busiddasd_device_remove_stop_bits (primary,DASD_STOPPED_QUIESCE ); } +/* +* The secondary device never got through format detection, but since it +* is a copy of the primary device, the format is exactly the same; +* therefore, the detected layout can simply be copied. +*/ + sec_priv->uses_cdl = prim_priv->uses_cdl; +/* re-enable device */ dasd_device_remove_stop_bits (primary,DASD_STOPPED_PPRC );dasd_device_remove_stop_bits (secondary,DASD_STOPPED_PPRC );
Signature · 1 line
2.51.0
Quoted 8 lines · Stefan Haberland
Please apply the following two patches for the upcoming 7.0-rc.
Both patches are straightforward and address a rarely used code path. While users are unlikely to encounter these issues in typical deployments, the second patch is important as it addresses a potential data corruption issue after a disk swap.
[...]
Applied, thanks!
[1/2] s390/dasd: Move quiesce state with pprc swap
commit: 40e9cd4ae8ec43b107ed2bff422a8fa39dcf4e4b
[2/2] s390/dasd: Copy detected format information to secondary device
commit: 4c527c7e030672efd788d0806d7a68972a7ba3c1Best regards,
Signature · 1 line
Jens Axboe