The commit e879a0d9cb08 ("md/raid1,raid10: don't ignore IO flags") breaks the lvm2 test shell/lvcreate-large-raid.sh. The commit changes raid1 and raid10 to pass down all the flags from the incoming bio. The problem is when we pass down the REQ_RAHEAD flag - bios with this flag may fail anytime and md-raid is not prepared to handle this failure.
This commit fixes the code, so that the REQ_RAHEAD flag is not passed down. Signed-off-by: Mikulas Patocka <mpato...@redhat.com> Fixes: e879a0d9cb08 ("md/raid1,raid10: don't ignore IO flags") --- drivers/md/raid1.c | 1 + drivers/md/raid10.c | 1 + 2 files changed, 2 insertions(+) Index: linux-2.6/drivers/md/raid1.c =================================================================== --- linux-2.6.orig/drivers/md/raid1.c +++ linux-2.6/drivers/md/raid1.c @@ -1404,6 +1404,7 @@ static void raid1_read_request(struct md read_bio->bi_iter.bi_sector = r1_bio->sector + mirror->rdev->data_offset; read_bio->bi_end_io = raid1_end_read_request; + read_bio->bi_opf &= ~REQ_RAHEAD; if (test_bit(FailFast, &mirror->rdev->flags) && test_bit(R1BIO_FailFast, &r1_bio->state)) read_bio->bi_opf |= MD_FAILFAST; Index: linux-2.6/drivers/md/raid10.c =================================================================== --- linux-2.6.orig/drivers/md/raid10.c +++ linux-2.6/drivers/md/raid10.c @@ -1263,6 +1263,7 @@ static void raid10_write_one_disk(struct mbio->bi_iter.bi_sector = (r10_bio->devs[n_copy].addr + choose_data_offset(r10_bio, rdev)); mbio->bi_end_io = raid10_end_write_request; + mbio->bi_opf &= ~REQ_RAHEAD; if (!replacement && test_bit(FailFast, &conf->mirrors[devnum].rdev->flags) && enough(conf, devnum))