]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
dm mirror: fix read error on recovery after default leg failure
authorHeinz Mauelshagen <heinzm@redhat.com>
Mon, 10 Oct 2016 15:58:32 +0000 (17:58 +0200)
committerMike Snitzer <snitzer@redhat.com>
Fri, 14 Oct 2016 15:54:10 +0000 (11:54 -0400)
If a default leg has failed, any read will cause a new operational
default leg to be selected and the read is resubmitted.  But until now
the read will return failure even though it was successful due to
resubmission.  The reason for this is bio->bi_error was not being
cleared before resubmitting the bio.

Fix by clearing bio->bi_error before resubmission.

Fixes: 4246a0b63bd8 ("block: add a bi_error field to struct bio")
Cc: stable@vger.kernel.org # 4.3+
Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-raid1.c

index bdf1606f67bcfbfcfadcfdc65f2c559c68fff5c9..7a6254d54baf85a50e85627e2e7685814dde6f5a 100644 (file)
@@ -1292,6 +1292,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio, int error)
 
                        dm_bio_restore(bd, bio);
                        bio_record->details.bi_bdev = NULL;
+                       bio->bi_error = 0;
 
                        queue_bio(ms, bio, rw);
                        return DM_ENDIO_INCOMPLETE;