--- /dev/null
+From 4044ba58dd15cb01797c4fd034f39ef4a75f7cc3 Mon Sep 17 00:00:00 2001
+From: NeilBrown <neilb@suse.de>
+Date: Fri, 9 Jan 2009 08:31:11 +1100
+Subject: [PATCH] md: don't retry recovery of raid1 that fails due to error on source drive.
+
+If a raid1 has only one working drive and it has a sector which
+gives an error on read, then an attempt to recover onto a spare will
+fail, but as the single remaining drive is not removed from the
+array, the recovery will be immediately re-attempted, resulting
+in an infinite recovery loop.
+
+So detect this situation and don't retry recovery once an error
+on the lone remaining drive is detected.
+
+Allow recovery to be retried once every time a spare is added
+in case the problem wasn't actually a media error.
+
+Signed-off-by: NeilBrown <neilb@suse.de>
+---
+ drivers/md/md.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- linux-2.6.27-SLE11_BRANCH.orig/drivers/md/md.c
++++ linux-2.6.27-SLE11_BRANCH/drivers/md/md.c
+@@ -1512,6 +1512,9 @@ static int bind_rdev_to_array(mdk_rdev_t
+ list_add_rcu(&rdev->same_set, &mddev->disks);
+ bd_claim_by_disk(rdev->bdev, rdev->bdev->bd_holder, mddev->gendisk);
+ md_integrity_check(rdev, mddev);
++
++ /* May as well allow recovery to be retried once */
++ clear_bit(MD_RECOVERY_DISABLED, &mddev->recovery);
+ return 0;
+
+ fail: