From 7f73518e8c0d5d9f410dd5c7d5cf3a0a693af21c Mon Sep 17 00:00:00 2001 From: NeilBrown Date: Tue, 22 May 2012 13:55:33 +1000 Subject: [PATCH] --- yaml --- r: 305966 b: refs/heads/master c: 63aced61023a054825ffd6e33ac1ab99036dadd2 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/md/raid10.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 921ef6334799..b001339a6ebe 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: da7613b8b042ab1d3ea55459ed97301e4a2097bb +refs/heads/master: 63aced61023a054825ffd6e33ac1ab99036dadd2 diff --git a/trunk/drivers/md/raid10.c b/trunk/drivers/md/raid10.c index ae2a5a4c6bc5..987db37cb875 100644 --- a/trunk/drivers/md/raid10.c +++ b/trunk/drivers/md/raid10.c @@ -1731,6 +1731,7 @@ static int raid10_remove_disk(struct mddev *mddev, struct md_rdev *rdev) if (!test_bit(Faulty, &rdev->flags) && mddev->recovery_disabled != p->recovery_disabled && (!p->replacement || p->replacement == rdev) && + number < conf->geo.raid_disks && enough(conf, -1)) { err = -EBUSY; goto abort; @@ -4485,6 +4486,18 @@ static void raid10_finish_reshape(struct mddev *mddev) mddev->resync_max_sectors = size; set_capacity(mddev->gendisk, mddev->array_sectors); revalidate_disk(mddev->gendisk); + } else { + int d; + for (d = conf->geo.raid_disks ; + d < conf->geo.raid_disks - mddev->delta_disks; + d++) { + struct md_rdev *rdev = conf->mirrors[d].rdev; + if (rdev) + clear_bit(In_sync, &rdev->flags); + rdev = conf->mirrors[d].replacement; + if (rdev) + clear_bit(In_sync, &rdev->flags); + } } mddev->layout = mddev->new_layout; mddev->chunk_sectors = 1 << conf->geo.chunk_shift;