diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/md/raid10.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index ae2a5a4c6bc5..987db37cb875 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
@@ -1731,6 +1731,7 @@ static int raid10_remove_disk(struct mddev *mddev, struct md_rdev *rdev) | |||
1731 | if (!test_bit(Faulty, &rdev->flags) && | 1731 | if (!test_bit(Faulty, &rdev->flags) && |
1732 | mddev->recovery_disabled != p->recovery_disabled && | 1732 | mddev->recovery_disabled != p->recovery_disabled && |
1733 | (!p->replacement || p->replacement == rdev) && | 1733 | (!p->replacement || p->replacement == rdev) && |
1734 | number < conf->geo.raid_disks && | ||
1734 | enough(conf, -1)) { | 1735 | enough(conf, -1)) { |
1735 | err = -EBUSY; | 1736 | err = -EBUSY; |
1736 | goto abort; | 1737 | goto abort; |
@@ -4485,6 +4486,18 @@ static void raid10_finish_reshape(struct mddev *mddev) | |||
4485 | mddev->resync_max_sectors = size; | 4486 | mddev->resync_max_sectors = size; |
4486 | set_capacity(mddev->gendisk, mddev->array_sectors); | 4487 | set_capacity(mddev->gendisk, mddev->array_sectors); |
4487 | revalidate_disk(mddev->gendisk); | 4488 | revalidate_disk(mddev->gendisk); |
4489 | } else { | ||
4490 | int d; | ||
4491 | for (d = conf->geo.raid_disks ; | ||
4492 | d < conf->geo.raid_disks - mddev->delta_disks; | ||
4493 | d++) { | ||
4494 | struct md_rdev *rdev = conf->mirrors[d].rdev; | ||
4495 | if (rdev) | ||
4496 | clear_bit(In_sync, &rdev->flags); | ||
4497 | rdev = conf->mirrors[d].replacement; | ||
4498 | if (rdev) | ||
4499 | clear_bit(In_sync, &rdev->flags); | ||
4500 | } | ||
4488 | } | 4501 | } |
4489 | mddev->layout = mddev->new_layout; | 4502 | mddev->layout = mddev->new_layout; |
4490 | mddev->chunk_sectors = 1 << conf->geo.chunk_shift; | 4503 | mddev->chunk_sectors = 1 << conf->geo.chunk_shift; |