diff mbox series

[SRU,E,1/1] UBUNTU: SAUCE: s390/dasd: disable ese support due to possible data corruption

Message ID 1580148371-16643-2-git-send-email-frank.heimes@canonical.com
State New
Headers show
Series Disable ECKD Thin Provisioning to prevent data loss (LP: 1860535) | expand

Commit Message

Frank Heimes Jan. 27, 2020, 6:06 p.m. UTC
From: Stefan Haberland <sth@linux.ibm.com>

BugLink: https://bugs.launchpad.net/bugs/1860535

Devices are formatted in multiple of tracks.
For an enhanced space efficient (ese) volume we get errors when accessing
not formatted tracks. In this case the driver either formats the track
on the flight for write requests or returns zero data for read requests.

In case a request spans multiple tracks, the indication of an unformatted
track presented for the first track is incorrectly applied to all tracks
covered by the request. As a result, tracks containing data will be handled
as if empty, resulting in zero data being returned on read, or overwriting
existing data with zero on write.

While working on a proper fix disable the feature by always returning zero
for the ese check. This disables all ese special handling and prevents the
possible data corruption.

Fixes: 5e2b17e712cf ("s390/dasd: Add dynamic formatting support for ESE volumes")

OriginalAuthor: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Frank Heimes <frank.heimes@canonical.com>

 drivers/s390/block/dasd_eckd.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
diff mbox series


diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index c94184d..941afed 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -1567,9 +1567,11 @@  static int dasd_eckd_read_vol_info(struct dasd_device *device)
 static int dasd_eckd_is_ese(struct dasd_device *device)
-	struct dasd_eckd_private *private = device->private;
-	return private->vsq.vol_info.ese;
+	/*
+	 * return 0 to disable ese support
+	 * this will be changed when a data integrity issue is solved
+	 */
+	return 0;
 static int dasd_eckd_ext_pool_id(struct dasd_device *device)