• Stefan Haberland's avatar
    s390/dasd: fix data corruption for ESE devices · 5b53a405
    Stefan Haberland authored
    For ESE devices we get an error when accessing an unformatted track.
    The handling of this error will return zero data for read requests and
    format the track on demand before writing to it. To do this the code needs
    to distinguish between read and write requests. This is done with data from
    the blocklayer request. A pointer to the blocklayer request is stored in
    the CQR.
    
    If there is an error on the device an ERP request is built to do error
    recovery. While the ERP request is mostly a copy of the original CQR the
    pointer to the blocklayer request is not copied to not accidentally pass
    it back to the blocklayer without cleanup.
    
    This leads to the error that during ESE handling after an ERP request was
    built it is not possible to determine the IO direction. This leads to the
    formatting of a track for read requests which might in turn lead to data
    corruption.
    
    Fixes: 5e2b17e7 ("s390/dasd: Add dynamic formatting support for ESE volumes")
    Cc: stable@vger.kernel.org # 5.3+
    Signed-off-by: default avatarStefan Haberland <sth@linux.ibm.com>
    Reviewed-by: default avatarJan Hoeppner <hoeppner@linux.ibm.com>
    Link: https://lore.kernel.org/r/20220505141733.1989450-2-sth@linux.ibm.comSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    5b53a405
dasd_eckd.c 183 KB