]> git.baikalelectronics.ru Git - kernel.git/commit
md/raid10: close race that lose writes lost when replacement completes.
authorNeilBrown <neilb@suse.de>
Thu, 22 Nov 2012 03:42:49 +0000 (14:42 +1100)
committerNeilBrown <neilb@suse.de>
Thu, 22 Nov 2012 04:12:36 +0000 (15:12 +1100)
commitb6c5abd9a3216cae4dc154a2d49d1b1b0a523711
treeeb897529fb562a99e56fe29934f141f68c906af3
parent9fe39aa83b352cc00adb9aa7939914f1bc7c8056
md/raid10: close race that lose writes lost when replacement completes.

When a replacement operation completes there is a small window
when the original device is marked 'faulty' and the replacement
still looks like a replacement.  The faulty should be removed and
the replacement moved in place very quickly, bit it isn't instant.

So the code write out to the array must handle the possibility that
the only working device for some slot in the replacement - but it
doesn't.  If the primary device is faulty it just gives up.  This
can lead to corruption.

So make the code more robust: if either  the primary or the
replacement is present and working, write to them.  Only when
neither are present do we give up.

This bug has been present since replacement was introduced in
3.3, so it is suitable for any -stable kernel since then.

Reported-by: "George Spelvin" <linux@horizon.com>
Cc: stable@vger.kernel.org
Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/raid10.c