Fixed by commit fae8cc5ed0714953b1ad7cf86 I believe.
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=fae8cc5ed
From: NeilBrown<neilb@suse.de>
Date: Tue, 14 Feb 2012 00:10:10 +0000 (+1100)
Subject: md/raid10: fix handling of error on last working device in array.
md/raid10: fix handling of error on last working device in array.
If we get a read error on the last working device in a RAID10 which
contains the target block, then we don't fail the device (which is
good) but we don't abort retries, which is wrong.
We end up in an infinite loop retrying the read on the one device.
NeilBrown