diff options
Diffstat (limited to 'drivers/md/raid5.c')
-rw-r--r-- | drivers/md/raid5.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 66cd47973398..96c690279fc6 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -5526,8 +5526,13 @@ static int raid5_start_reshape(mddev_t *mddev) | |||
5526 | 5526 | ||
5527 | /* Add some new drives, as many as will fit. | 5527 | /* Add some new drives, as many as will fit. |
5528 | * We know there are enough to make the newly sized array work. | 5528 | * We know there are enough to make the newly sized array work. |
5529 | * Don't add devices if we are reducing the number of | ||
5530 | * devices in the array. This is because it is not possible | ||
5531 | * to correctly record the "partially reconstructed" state of | ||
5532 | * such devices during the reshape and confusion could result. | ||
5529 | */ | 5533 | */ |
5530 | list_for_each_entry(rdev, &mddev->disks, same_set) | 5534 | if (mddev->delta_disks >= 0) |
5535 | list_for_each_entry(rdev, &mddev->disks, same_set) | ||
5531 | if (rdev->raid_disk < 0 && | 5536 | if (rdev->raid_disk < 0 && |
5532 | !test_bit(Faulty, &rdev->flags)) { | 5537 | !test_bit(Faulty, &rdev->flags)) { |
5533 | if (raid5_add_disk(mddev, rdev) == 0) { | 5538 | if (raid5_add_disk(mddev, rdev) == 0) { |
@@ -5549,7 +5554,7 @@ static int raid5_start_reshape(mddev_t *mddev) | |||
5549 | } | 5554 | } |
5550 | 5555 | ||
5551 | /* When a reshape changes the number of devices, ->degraded | 5556 | /* When a reshape changes the number of devices, ->degraded |
5552 | * is measured against the large of the pre and post number of | 5557 | * is measured against the larger of the pre and post number of |
5553 | * devices.*/ | 5558 | * devices.*/ |
5554 | if (mddev->delta_disks > 0) { | 5559 | if (mddev->delta_disks > 0) { |
5555 | spin_lock_irqsave(&conf->device_lock, flags); | 5560 | spin_lock_irqsave(&conf->device_lock, flags); |