• Stefan Haberland's avatar
    s390/dasd: fix data corruption for thin provisioned devices · 5e6bdd37
    Stefan Haberland authored
    Devices are formatted in multiple of tracks.
    For an Extent Space Efficient (ESE) volume we get errors when accessing
    unformatted 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 empty, resulting in zero data being returned on read, or overwriting
    existing data with zero on write.
    
    Fix by determining the track that gets the NRF error.
    For write requests only format the track that is surely not formatted.
    For Read requests all tracks before have returned valid data and should not
    be touched.
    All tracks after the unformatted track might be formatted or not. Those are
    returned to the blocklayer to build a new request.
    
    When using alias devices there is a chance that multiple write requests
    trigger a format of the same track which might lead to data loss. Ensure
    that a track is formatted only once by maintaining a list of currently
    processed tracks.
    
    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>
    Reviewed-by: default avatarPeter Oberparleiter <oberpar@linux.ibm.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    5e6bdd37
dasd_eckd.c 185 KB