| From 02b898f2f04e418094f0093a3ad0b415bcdbe8eb Mon Sep 17 00:00:00 2001 |
| From: NeilBrown <neilb@suse.de> |
| Date: Wed, 31 Oct 2012 11:42:03 +1100 |
| Subject: md/raid1: Fix assembling of arrays containing Replacements. |
| |
| From: NeilBrown <neilb@suse.de> |
| |
| commit 02b898f2f04e418094f0093a3ad0b415bcdbe8eb upstream. |
| |
| setup_conf in raid1.c uses conf->raid_disks before assigning |
| a value. It is used when including 'Replacement' devices. |
| |
| The consequence is that assembling an array which contains a |
| replacement will misbehave and either not include the replacement, or |
| not include the device being replaced. |
| |
| Though this doesn't lead directly to data corruption, it could lead to |
| reduced data safety. |
| |
| So use mddev->raid_disks, which is initialised, instead. |
| |
| Bug was introduced by commit c19d57980b38a5bb613a898937a1cf85f422fb9b |
| md/raid1: recognise replacements when assembling arrays. |
| |
| in 3.3, so fix is suitable for 3.3.y thru 3.6.y. |
| |
| Signed-off-by: NeilBrown <neilb@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/md/raid1.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/md/raid1.c |
| +++ b/drivers/md/raid1.c |
| @@ -2699,7 +2699,7 @@ static struct r1conf *setup_conf(struct |
| || disk_idx < 0) |
| continue; |
| if (test_bit(Replacement, &rdev->flags)) |
| - disk = conf->mirrors + conf->raid_disks + disk_idx; |
| + disk = conf->mirrors + mddev->raid_disks + disk_idx; |
| else |
| disk = conf->mirrors + disk_idx; |
| |