Neil,
unless you've already done so, I believe there is a little fix needed in the raid1 read reschedule code. As the code currently works, a read that is retried will continue to fail and cause raid1 to go into an infinite retry loop:
Sep 10 14:42:04 fiji kernel: raid1: sdb1: redirecting sector 2 to another mirror
Sep 10 14:42:04 fiji kernel: raid1: sdb1: rescheduling sector 2
Sep 10 14:42:04 fiji kernel: raid1: sdb1: redirecting sector 2 to another mirror
Sep 10 14:42:04 fiji kernel: raid1: sdb1: rescheduling sector 2
Sep 10 14:42:04 fiji kernel: raid1: sdb1: redirecting sector 2 to another mirror
Patch attached.
Thanks, Paul
--- linux/drivers/md/raid1.c.orig 2004-09-10 13:49:58.000000000 -0400 +++ linux/drivers/md/raid1.c 2004-09-10 15:46:47.000000000 -0400 @@ -970,6 +970,8 @@ static void raid1d(mddev_t *mddev) bio->bi_bdev = rdev->bdev; bio->bi_sector = r1_bio->sector + rdev->data_offset; bio->bi_rw = READ; + /* clear any previous error */ + set_bit(BIO_UPTODATE, &bio->bi_flags); unplug = 1; generic_make_request(bio); }