Commit 56a2559b authored by NeilBrown's avatar NeilBrown

md/raid10: recognise replacements when assembling array.

If a Replacement is seen, file it as such.

If we see two replacements (or two normal devices) for the one slot,
abort.
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 4ca40c2c
...@@ -3201,6 +3201,16 @@ static int run(struct mddev *mddev) ...@@ -3201,6 +3201,16 @@ static int run(struct mddev *mddev)
continue; continue;
disk = conf->mirrors + disk_idx; disk = conf->mirrors + disk_idx;
if (test_bit(Replacement, &rdev->flags)) {
if (disk->replacement)
goto out_free_conf;
disk->replacement = rdev;
} else {
if (disk->rdev)
goto out_free_conf;
disk->rdev = rdev;
}
disk->rdev = rdev; disk->rdev = rdev;
disk_stack_limits(mddev->gendisk, rdev->bdev, disk_stack_limits(mddev->gendisk, rdev->bdev,
rdev->data_offset << 9); rdev->data_offset << 9);
...@@ -3228,6 +3238,13 @@ static int run(struct mddev *mddev) ...@@ -3228,6 +3238,13 @@ static int run(struct mddev *mddev)
disk = conf->mirrors + i; disk = conf->mirrors + i;
if (!disk->rdev && disk->replacement) {
/* The replacement is all we have - use it */
disk->rdev = disk->replacement;
disk->replacement = NULL;
clear_bit(Replacement, &disk->rdev->flags);
}
if (!disk->rdev || if (!disk->rdev ||
!test_bit(In_sync, &disk->rdev->flags)) { !test_bit(In_sync, &disk->rdev->flags)) {
disk->head_position = 0; disk->head_position = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment